Systemd mit Parameter

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Hinweis: In dem Thema Systemd mit Parameter gibt es 5 Antworten. Der letzte Beitrag () befindet sich ganz unten auf dieser Seite.
  • Systemd mit Parameter

    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:

    Quellcode

    1. 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:

    Quellcode

    1. [Unit]
    2. Description=Device setup service for %I
    3. BindsTo=dev-disk-by\x2did-%i.device
    4. After=dev-disk-by\x2did-%i.device
    5. [Service]
    6. Type=oneshot
    7. ExecStart=/usr/bin/device-setup.sh %I
    8. RemainAfterExit=yes
    9. ExecStop=/usr/bin/device-cleanup.sh %I
    Wenn ich nun jedoch in das Log des Systemd-Jobs schaue bekomme ich beim Start des Jobs folgende Fehlermdeldung:

    Quellcode

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

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

    Und hier:
    systemctl

    Ich hoffe, das bringt dich etwas weiter.
    Zitat Albert Einstein:
    "Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit,
    aber bei dem Universum bin ich mir noch nicht ganz sicher."

    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
    enricozini.org/blog/2017/debian/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

    Quellcode

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

  • Kann es sein, dass "%i" nicht in einem absoluten Pfad erlaubt ist?
    Siehe hier:
    systemd service template with %i / %I in ExecStart not working · Issue #679 · systemd/systemd · GitHub
    Und hier:
    systemd.service
    Zitat Albert Einstein:
    "Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit,
    aber bei dem Universum bin ich mir noch nicht ganz sicher."

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von sterun ()

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

  • Neu

    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