Die Antwort hängt davon ab, ob die Variable konstant sein soll (dh nicht vom Benutzer geändert werden soll, der die Einheit erhält) oder variabel (vom Benutzer festgelegt werden soll).
Da es sich um Ihre örtliche Einheit handelt, ist die Grenze ziemlich verschwommen und in beiden Fällen funktioniert es. Wenn Sie jedoch anfangen würden, es zu verbreiten, und es würde in enden /usr/lib/systemd/system
, würde dies wichtig werden.
Konstanter Wert
Wenn sich der Wert nicht pro Instanz ändern muss, ist die bevorzugte Methode Environment=
, ihn direkt in der Unit-Datei zu platzieren:
[Unit]
Description=My Daemon
[Service]
Environment="FOO=bar baz"
ExecStart=/bin/myforegroundcmd
[Install]
WantedBy=multi-user.target
Dies hat den Vorteil, dass die Variable mit der Einheit in einer einzigen Datei gespeichert wird. Daher ist es einfacher, die Unit-Datei zwischen den Systemen zu verschieben.
Variabler Wert
Die obige Lösung funktioniert jedoch nicht gut, wenn sysadmin den Wert der Umgebungsvariablen lokal ändern soll. Insbesondere müsste der neue Wert jedes Mal festgelegt werden, wenn die Einheitendatei aktualisiert wird.
In diesem Fall ist eine zusätzliche Datei zu verwenden. Wie - hängt in der Regel von der Distributionsrichtlinie ab.
Eine besonders interessante Lösung ist die Verwendung eines /etc/systemd/system/myservice.service.d
Verzeichnisses. Im Gegensatz zu anderen Lösungen wird dieses Verzeichnis von systemd selbst unterstützt und enthält daher keine verteilungsspezifischen Pfade.
In diesem Fall platzieren Sie eine Datei wie /etc/systemd/system/myservice.service.d/local.conf
diese und fügen die fehlenden Teile der Unit-Datei hinzu:
[Service]
Environment="FOO=bar baz"
Danach führt systemd die beiden Dateien beim Starten des Dienstes zusammen (denken Sie daran, systemctl daemon-reload
nachdem Sie eine der beiden Dateien geändert haben). Und da dieser Pfad direkt von systemd verwendet wird, verwenden Sie dies nicht EnvironmentFile=
.
Wenn der Wert nur auf einigen der betroffenen Systeme geändert werden soll, können Sie beide Lösungen kombinieren, indem Sie eine Standardeinstellung direkt in der Einheit und eine lokale Überschreibung in der anderen Datei festlegen.
sysconfig
Pfad ist spezifisch für Fedora, aber die Frage betrifft Arch Linux. Die Antwort von paluh ist interessanter, denke ich