RemainAfterExit=true
уже должен помочь. Вы уверены, что compile-app.service
действительно останавливается/перезапускается, когда вы останавливаете/перезапускаете другое устройство?
Вы также должны добавить compile-app.service
к After
из run-app.service
. На данный момент между двумя службами нет отношения порядка, поэтому они будут запускаться параллельно. Помните, что Wants/Requires/Conflicts
не подразумевает никакого упорядочения, и аналогично Before/After
не подразумевает никакой зависимости.
После дополнительных исследований, которые указали мне на использование blkid
в udev правила (см. e.g. это ArchLinux -Вики-статья , к сожалению, доступна только на немецком языке ), я узнал об этом, позвонив
blkid -o udev -p /dev/sdXn
вместо
udeavdm info /dev/sdXn
внутри запускаемого сценарияsystemd
-можно получить полную информацию даже о дочерних устройствах USB-накопителя, чье правило «добавить» обрабатывается.
Казалось бы, опция -p
здесь является ключевой, поскольку она переключается в режим активного зондирования, в котором устройство фактически считывается, вместо того, чтобы полагаться на кэшированную информацию (ср. например. справочную страницу или исходный код изblkid
).
Опция -o udev
просто служит для форматирования вывода способом, аналогичным вызову udevadm
, хотя это не 100% замена -в качестве начальных меток идентификатора вывода udevadm
(, такие как E:
, P:
и т. д. )здесь отсутствуют.