Ein systemd-Skript für das Remote-FUSE-Mounten von s3ql

1797
JKnight

Ich finde systemd sehr aufregend, aber wie würde ich damit ein Skript schreiben, um ein s3ql- Dateisystem zu mounten ? Der s3ql-Entwickler stellt beispielsweise eine Upstart-Konfiguration bereit, die die Aufgabe erfüllt.

Insbesondere muss beim Start mount.s3ql (als gewünschter Benutzer, da dies ein FUSE-Dateisystem ist) und beim Herunterfahren umount.s3ql ausgeführt werden. Was ist, wenn wir das Dateisystem vor dem Mounten fsck.s3ql wollen oder nach dem Start und vor dem Herunterfahren einen Unison-Synchronisationsschritt ausführen möchten (alle Änderungen, die ich an meinem persönlichen Upstart vorgenommen habe).

Auf den ersten Blick würde ich denken, dass ich eine Mount- Einheit auf systemd einrichten möchte, aber es scheint, dass die Service- Einheit tatsächlich besser mit den Befehlen vor und nach dem Ausführen des Exec-Befehls passt. (Alle Manpages sind hier verfügbar .)

Und auf welches Ziel muss ich angewiesen sein, um die Abhängigkeit von einer Netzwerkverbindung zu kodieren?

1

1 Antwort auf die Frage

1
grawity

Zunächst scheint es, dass für mount.s3qlund umount.s3qleine generische .mountEinheit angemessen ist. Sowohl der mountBefehl als auch das Systemd unterstützen beim Anhängen. Der Helfer muss jedoch die Standardmethode zum Übergeben von Optionen unterstützen, die von s3ql nicht verwendet wird. Außerdem gelten die gleichen Einschränkungen wie bei / etc / fstab .mount.fstype-o options

Mit einer .serviceEinheit, die die gewünschten Befehle aufruft, könnten Sie tatsächlich besser sein :

[Einheit] Wants=unison@s3ql.service After=unison@s3ql.service  [Bedienung] Typ = Gabelung Umgebung = AUTHFILE = / Pfad / zu / authinfo2 ExecStart = / usr / sbin / mount.s3ql --authfile $ $ $  ExecStop = / usr / sbin / umount.s3ql $  TimeoutSec = 5min 

Da es keine Standardmethode zur Konfiguration von Netzwerken gibt, geschweige denn eine, die tatsächlich prüft, ob die Verbindung tatsächlich funktioniert, gibt es kein standardmäßiges systemd- Ziel für das, was Sie möchten. Dies ist network.targetjedoch möglich, aber es kann davon ausgegangen werden, dass die Verbindung noch nicht verfügbar ist.

Wenn Sie NetworkManager verwenden, könnte Ihre Distribution eine Einheit enthalten, die ausgeführt wird, nm-onlinez. B. Arch ruft sie auf NetworkManager-wait-online.service.

[Einheit] Erforderlich = NetworkManager-wait-online.service Nach = NetworkManager-wait-online.service 
`mount.s3ql` unterstützt` -o-Optionen` (und hat es immer). Neuere Versionen enthalten auch eine Systemd-Benachrichtigungsunterstützung, sodass `Type = forking` nicht mehr korrekt ist. Nikratio vor 8 Jahren 1