Systemd mit Parameter

Hinweis: In dem Thema Systemd mit Parameter gibt es 5 Antworten. Der letzte Beitrag () befindet sich ganz unten auf dieser Seite.
  • 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:

    Code
    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:

    Wenn ich nun jedoch in das Log des Systemd-Jobs schaue bekomme ich beim Start des Jobs folgende Fehlermdeldung:

    Code
    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.

    Für den Inhalt des Beitrages 132669 haftet ausdrücklich der jeweilige Autor: inixlinux

  • Hat jemand eine Idee bzw. fehlen euch evtl. noch Angaben die bei der Lösung des Problems helfen könnten?


    Vielen Dank

    Für den Inhalt des Beitrages 132760 haftet ausdrücklich der jeweilige Autor: inixlinux

  • Schau mal hier:
    systemctl list-dependencies <TAB> <TAB>
    Z.B.
    systemctl list-dependencies --failed


    Und hier:
    systemctl


    Ich hoffe, das bringt dich etwas weiter.

    Für den Inhalt des Beitrages 132761 haftet ausdrücklich der jeweilige Autor: sterun

  • Vielen Dank, leider habe ich das Problem noch nicht gelöst.


    Ich habe noch folgendes im Netz gefunden
    https://www.enricozini.org/blo…ebian/systemd-07-devices/


    Das ist eine ähnliche Anforderung, jedoch funktioniert das bei mir ebenfalls nicht.
    Der Service wird immer sofort durch "StopWhenUnneeded=true" gestoppt nachdem ich diesen starte...


    Im angegebenen Link wird auch geschrieben, dass mit dem Befehl

    Code
    systemctl --all --full -t device

    alle devices aufgelistet werden können.
    Führe ich diese Befehl bei mir aus wird mein device auch aufgelistet.


    Ich vermute daher das es ein Problem mit dem %i Parameter ist....


    Wie kann ich das device dynamisch angeben?

    Für den Inhalt des Beitrages 132774 haftet ausdrücklich der jeweilige Autor: inixlinux

  • Vielen Dank für die Unterstützung.


    Das Problem lag nicht an dem Systemd-Service sondern daran, dass ich zum Testen eine SD-Karte an einem Kartenleser verwendet habe und das im Systemd-Service verwendete device zum Kartenleser gehörte.
    Dieses war daher auch nach dem Entfernen der SD-Karte noch vorhanden...

    Für den Inhalt des Beitrages 132920 haftet ausdrücklich der jeweilige Autor: inixlinux