Sie sollten die User=
Richtlinie in Ihrem systemd
Dienst verwenden.
Benutzer =, Gruppe =
Legen Sie den UNIX-Benutzer oder die UNIX-Gruppe fest, als die die Prozesse ausgeführt werden. Nimmt einen einzelnen Benutzer- oder Gruppennamen oder eine numerische ID als Argument. Für Systemdienste (Dienste, die vom Systemdienstmanager ausgeführt werden, dh von PID 1 verwaltet werden) und für Benutzerdienste des Root-Benutzers (Dienste, die von der Root-Instanz von systemd --user verwaltet werden) lautet der Standardwert "root", aber User = may verwendet werden, um einen anderen Benutzer anzugeben. Für Benutzerdienste eines anderen Benutzers ist das Wechseln der Benutzeridentität nicht zulässig. Daher ist die einzig gültige Einstellung derselbe Benutzer, unter dem der Dienstmanager des Benutzers ausgeführt wird. Wenn keine Gruppe festgelegt ist, wird die Standardgruppe des Benutzers verwendet. Diese Einstellung wirkt sich nicht auf Befehle aus, deren Befehlszeile "+" vorangestellt ist.
https://www.freedesktop.org/software/systemd/man/systemd.exec.html#User=
Ich würde auch empfehlen, Ihr Skript von einem Home-Verzeichnis in einen Standardpfad /usr/local/bin
oder ähnliches zu verschieben.
Sie sollten auch die Bestellung Ihres sicherstellen, connectdocker.service
indem Sie ihm das After=docker.service
und geben Requires=docker.service
. Wie geschrieben connectdocker.service
steht, versucht der wahrscheinlich, ungefähr zur gleichen Zeit wie der zu starten docker.service
, und Sie müssen warten, docker.service
bis er aktiv ist, bevor Sie eine Verbindung herstellen können.
Benötigt =
Konfiguriert Anforderungsabhängigkeiten von anderen Einheiten. Wenn diese Einheit aktiviert wird, werden auch die hier aufgeführten Einheiten aktiviert. Wenn eine der anderen Einheiten deaktiviert wird oder ihre Aktivierung fehlschlägt, wird diese Einheit deaktiviert. Diese Option kann mehrmals angegeben werden, oder es können mehrere durch Leerzeichen getrennte Einheiten in einer Option angegeben werden. In diesem Fall werden Anforderungsabhängigkeiten für alle aufgelisteten Namen erstellt. Beachten Sie, dass Anforderungsabhängigkeiten keinen Einfluss auf die Reihenfolge haben, in der Dienste gestartet oder gestoppt werden. Dies muss unabhängig mit den Optionen After = oder Before = konfiguriert werden. Wenn für eine Einheit foo.service eine Einheit erforderlich ist, die mit Requires = konfiguriert ist, und keine Bestellung mit After = oder Before = konfiguriert ist, werden beide Einheiten gleichzeitig und ohne Verzögerung zwischen ihnen gestartet, wenn foo.service aktiviert ist. Häufig,
Beachten Sie, dass dieser Abhängigkeitstyp nicht bedeutet, dass die andere Einheit immer aktiv sein muss, wenn diese Einheit ausgeführt wird. Insbesondere: Fehlgeschlagene Bedingungsprüfungen (z. B. ConditionPathExists =, ConditionPathExists =,… - siehe unten) führen nicht dazu, dass der Startjob einer Einheit mit der Abhängigkeit Requires = fehlschlägt. Einige Einheitentypen können auch von selbst deaktiviert werden (z. B. kann ein Serviceprozess entscheiden, sauber zu beenden, oder ein Gerät kann vom Benutzer getrennt werden), was nicht an Einheiten mit einer Abhängigkeit von Requires = weitergegeben wird. Verwenden Sie den Abhängigkeitstyp BindsTo = zusammen mit After =, um sicherzustellen, dass sich eine Einheit niemals im aktiven Zustand befindet, ohne dass sich eine bestimmte andere Einheit ebenfalls im aktiven Zustand befindet (siehe unten).
Beachten Sie, dass Abhängigkeiten dieses Typs auch außerhalb der Gerätekonfigurationsdatei konfiguriert werden können, indem ein Symlink zu einem Verzeichnis hinzugefügt wird, das der Gerätedatei beiliegt. Einzelheiten siehe oben.
https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Requires=
https://www.freedesktop.org/software/systemd/man/systemd.unit.html#Before=