Abhängigkeiten systemd-service definieren, Syntax

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    ich bräuchte eure Hilfe bei der Syntax eines systemd-service.

    Hinter "After=" wird ja angegeben was erst gegeben sein muss damit der Dienst startet.

    Unter

    /media/USB/Datenträger 31 GB

    wird per fstab ein USB-Stick gemounted

    Nun soll der Service nur starten wenn dieses Mounting auch erfolgt ist, sprich der USB-Stick auch vorhanden ist.

    Mittels

    systemd-escape --path /media/USB/Datenträger 31 GB
    soll man wohl den Pfad mit den Sonder- und Leerzeichen umwandeln

    Wie muss die Syntax unter Unit genau aussehen?

    Vielen Dank für eure Hilfe.

    Code
    [Unit]Description=...Documentation=...Wants=network-online.targetAfter=network-online.target nss-lookup.target media-volume.mountBindsTo=/media/USB/Datentr\xc3\xa4ger\x2031\x20GB
  • Abhängigkeiten systemd-service definieren, Syntax? Schau mal ob du hier fündig wirst!

  • Nun soll der Service nur starten wenn dieses Mounting auch erfolgt ist, sprich der USB-Stick auch vorhanden ist.

    Das kannst Du mit z. B.:

    Code
    ConditionPathExists=/dev/sdxy

    (siehe die Ausgabe von lsblk) in der [Unit]-Section machen (und testen).

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • muss dieses

    ConditionPathExists=/dev/sdxy

    als eigene Zeite in die "Unit"-Sektion oder hinter Wants=

    In einem Tutorial habe ich gelesen man

    After=media-volume.mount

    BindsTo=

    verwenden.

    Gibt es das Unterschiede bzw. wann welches besser ist?

    Vielen Dank.

  • So z. B. habe ich das mit ample, auf meinem PI:

    Code
    [Unit]
    After=media-amplefolder.mount
    Requires=media-amplefolder.mount
    ConditionPathExists=/dev/sda1

    EDIT:

    Bei einem gemounteten Datenträger (als Bedingung) kann man es noch etwas genauer/fordernder machen, mit den _zusätzlichen_ Zeilen/Bedingungen (in deinem Fall):

    Code
    ConditionPathIsMountPoint=/media/USB/Datenträger
    ConditionDirectoryNotEmpty=/media/USB/Datenträger

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

    Einmal editiert, zuletzt von rpi444 (29. Juni 2022 um 09:14)

  • Code
    [Unit]
    After=media-amplefolder.mount
    Requires=media-amplefolder.mount
    ConditionPathExists=/dev/sda1
    Code
    deddddd
    ConditionDirectoryNotEmpty=/media/USB/Datenträger

    ich stehe noch auf dem Schlauch


    a) an deinem Beispiel mit media-amplefolder.mount, wo wird definiert was dieser Mounpoint? Woher weiß systemd welcher Mountpoint gemeint ist?

    b)

    ich mounte den USB-Stick so über fstab:

    UUID=CA33-B138 /media/USB/MP1/ vfat defaults,utf8,uid=pi,gid=pi,rw,user,sync,nofail 0 2

    Daraus macht irgendwas die Bezeichnung

    /media/USB/Datenträger 31 GB

    Wie ist mit dem Umlaut ä und den Leerzeichen umzugehen, bei den Condition?

  • ..., wo wird definiert was dieser Mounpoint?

    Was genau meinst Du mit dieser Frage? Ich verstehe deine Formulierung nicht? Ist diese/deine Frage vollständig?

    Woher weiß systemd welcher Mountpoint gemeint ist?

    systemd weiß welcher Mountpoint gemeint ist, aus meiner Eintragung in der service-unit:

    Code
    ConditionPathIsMountPoint=/media/amplefolder

    Daraus macht irgendwas die Bezeichnung

    /media/USB/Datenträger 31 GB

    OK, kann sein. Aber was willst Du damit sagen?

    Wie ist mit dem Umlaut ä und den Leerzeichen umzugehen, bei den Condition?

    Ich benutze keine Umlaute und keine Leerzeichen. Ich weiß nicht wie man in einer service-unit damit umgehen müsste/kann.

    Da ich meine PIs als Server benutze, stelle ich nur die Uhrzeit/Datum auf CEST. Der Rest der locale ist die Standard-Einstellung.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample


  • a) an deinem Beispiel mit media-amplefolder.mount, wo wird definiert was dieser Mounpoint? Woher weiß systemd welcher Mountpoint gemeint ist?

    Der Mountpoint ergibt sich aus dem Filenamen der Mount-Unit.

    media-amplefolder.mount wird als /media/amplefolder gemounted,

    Siehe < man systemd.mount > :

    "Mount units must be named after the mount point directories they control."

    Servus !

    RTFM = Read The Factory Manual, oder so

  • Der Mountpoint ergibt sich aus dem Filenamen der Mount-Unit.

    Nein, der Mountpoint ist in der /etc/fstab (bei second field) eingetragen und der Filenamen der Mount-unit wird vom systemd-fstab-generator festgelegt.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • ..., es gibt eben mehrere Möglichkeiten, ...

    Ändert aber nichts an der m. E., unvollständigen Frage des TE:

    Zitat

    wo wird definiert was dieser Mounpoint?

    ;)

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

  • Daraus macht irgendwas die Bezeichnung

    /media/USB/Datenträger 31 GB

    Gemounted wird immer (wenn vorhanden) die im Filesystem des Sticks vergebene Bezeichnung ("label"). Wenn der Stick mit dem Fat Filesystem als /MP1 gemountet werden soll, muss das Label des zu mountenden Filesystems (von derzeit "Datenträger") auf "MP1" geändert werden. Alles das hat mit systemd nichts zu tun.

    Servus !

    PS: mit < man fatlabel > beispielsweise

    RTFM = Read The Factory Manual, oder so

  • "Mount units must be named after the mount point directories they control."

    genau das hat mir gefehlt.

    man muss den Pfad nehmen und die Schrägzeichen durch ein Minus ersetzen, und am Ende eine .mount schreiben

    Übrigens ein sehr gutes Beispiel warum man-pages nicht immer weiterhelfen. Der Satz sagt nur dass eine Abhängigkeit besteht, aber nicht wie diese aussieht.

    Erst dein Beispiel war die Erklärung wie diese Abhängigkeit aussieht.

    Gemounted wird immer (wenn vorhanden) die im Filesystem des Sticks vergebene Bezeichnung ("label")

    auch hier, das hat mir gefehlt. Vom Label eines Datenträgers kommt die Anzeige/Bezeichnung

    Das muss man auch erst mal darauf kommen ;)

    Vielen Dank für die Hilfe.

    EDIT:

    Steht alles in der Man Page drinnen.

    in welcher muss ich schauen?

  • man muss den Pfad nehmen und die Schrägzeichen durch ein Minus ersetzen, und am Ende eine .mount schreiben

    Nein, das muss man nicht. Man nimmt systemctl. Z. B.:

    Code
    :~ $ systemctl list-units --type=mount | grep -i ample
      media-amplefolder.mount        loaded active mounted /media/amplefolder

    BTW: Noch besser ist es, die Fragen richtig zu stellen/formulieren, damit die anderen verstehen was Du meinst/willst.

    EDIT:

    BTW: Da du die mount-unit als Abhängigkeit, in eine service-unit eintragen willst, solltest Du auch dafür sorgen, dass der Name der mount-unit persistent/unveränderlich ist bzw. bleibt.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

    2 Mal editiert, zuletzt von rpi444 (5. Juli 2022 um 10:34)

  • EDIT:

    in welcher muss ich schauen?

    Gemeint war < man systemd-fstab-generator >, sowie < man systemd.mount >

    Mit < apropos systemd > bekommst Du alle Manpages angezeigt, in deren Beschreibungszeile ein systemd vorkommt. Ist der Scrollback Puffer zu klein, übergibst Du die Ausgabe dem more, oder less Programm < apropos systemd | less >

    < man man > ist eigentlich selbsterklärend.

    Die Abhängigkeiten, die Du in systemd suchst, sind auch in

    < man systemd > und < man systemd.unit > grundsätlich dargestellt.


    Servus !

    RTFM = Read The Factory Manual, oder so

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!