Hallo zusammen,
ich möchte beim Anstecken eines USB Datenträgers ein Skript ausführen und ebenfalls soll ein "aufräumen" Skript beim Entfernen dieses USB Sticks ausgeführt werden.
Ich habe dafür nun eine Udev Regel erstellt und starte mit dieser Regel einen Systemd-job. Der Umweg über systemd, da das Skript länger läuft.
Udev-Regel:
ACTION=="add", ENV{DEVTYPE}=="partition", ENV{ID_BUS}=="?*", ENV{ID_SERIAL}=="?*", PROGRAM="/usr/bin/systemd-escape -p --template=device-setup@.service $env{ID_BUS}-$env{ID_SERIAL}-part%n", TAG+="systemd", ENV{SYSTEMD_WANTS}+="%c"
device-setup@.service:
[Unit]
Description=Device setup service for %I
BindsTo=dev-disk-by\x2did-%i.device
After=dev-disk-by\x2did-%i.device
[Service]
Type=oneshot
ExecStart=/usr/bin/device-setup.sh %I
RemainAfterExit=yes
ExecStop=/usr/bin/device-cleanup.sh %I
Alles anzeigen
Wenn ich nun jedoch in das Log des Systemd-Jobs schaue bekomme ich beim Start des Jobs folgende Fehlermdeldung:
Mai 11 18:45:59 PC-NAME systemd[1]: device-setup@usbx2dGenericx2d00000000000000000x2d0:2x2dpart2.service: Job device-setup@usbx2dGenericx2d00000000000000000x2d0:2x2dpart2.service/start failed with result 'dependency'.
Entferne ich BindsTo= und After= aus dem Systemd-Job startet der Job ohne Fehlermeldung, allerdings wird er dann ja auch beim Entfernen des USB Sticks nicht beendet und das device-cleanup.sh Skript wird nicht ausgeführt...
Meine Vermutung ist nun, dass im Parameter %i etwas escaped wird und der Pfad in BindsTo und After daher ungültig wird.
Meine Frage wäre nun, wie gebe ich BindsTo und After korrekt an, damit der Systemd-Job beim Entfernen des USB Sticks auch beendet wird.
Achja der USB Stick ohne systemd escaped heißt z.B. usb-Generic-00000000000000000-0:2-part2 und ist dann unter dev/disk/by-id/usb-Generic-00000000000000000-0:2-part2 zu finden.
Vielen Dank für eure Unterstützung.