Abhängigkeiten systemd-service definieren, Syntax

  • 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
  • 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

  • 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

    Edited once, last by rpi444 ().

  • 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


  • 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

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

    Stimmt auch, es gibt eben mehrere Möglichkeiten, auch über den systemd-fstab-generatir. Steht alles in der Man Page drinnen.


    Servus !

    RTFM = Read The Factory Manual, oder so

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

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

    Quote

    wo wird definiert was dieser Mounpoint?

    ;)

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

  • 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

    Edited 2 times, last by rpi444 ().

  • 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