Odpowiedź zależy od tego, czy zmienna ma być stała (to znaczy nie powinna być modyfikowana przez użytkownika otrzymującego jednostkę), czy zmienna (powinna być ustawiona przez użytkownika).
Ponieważ jest to twoja jednostka lokalna, granica jest dość rozmyta i tak czy inaczej zadziałałoby. Jeśli jednak zaczniesz go rozpowszechniać i skończy się /usr/lib/systemd/system
to, stanie się to ważne.
Stała wartość
Jeśli wartość nie musi być zmieniana dla każdej instancji, preferowanym sposobem byłoby umieszczenie jej jako Environment=
, bezpośrednio w pliku jednostki:
[Unit]
Description=My Daemon
[Service]
Environment="FOO=bar baz"
ExecStart=/bin/myforegroundcmd
[Install]
WantedBy=multi-user.target
Zaletą tego jest to, że zmienna jest przechowywana w jednym pliku z jednostką. Dlatego plik jednostki jest łatwiejszy do przenoszenia między systemami.
Zmienna wartość
Jednak powyższe rozwiązanie nie działa dobrze, gdy sysadmin ma lokalnie zmieniać wartość zmiennej środowiskowej. Mówiąc dokładniej, nowa wartość musiałaby być ustawiona przy każdej aktualizacji pliku jednostki.
W tym przypadku należy użyć dodatkowego pliku. Jak - zazwyczaj zależy od zasad dystrybucji.
Jednym szczególnie interesującym rozwiązaniem jest użycie /etc/systemd/system/myservice.service.d
katalogu. W przeciwieństwie do innych rozwiązań ten katalog jest obsługiwany przez systemd i dlatego nie zawiera ścieżek specyficznych dla dystrybucji.
W takim przypadku /etc/systemd/system/myservice.service.d/local.conf
umieścisz taki plik, który doda brakujące części pliku jednostkowego:
[Service]
Environment="FOO=bar baz"
Następnie systemd łączy dwa pliki podczas uruchamiania usługi (pamiętaj, aby systemctl daemon-reload
po zmianie jednego z nich). A ponieważ ta ścieżka jest używana bezpośrednio przez systemd, nie używasz EnvironmentFile=
do tego.
Jeśli wartość ma zostać zmieniona tylko w niektórych systemach, których dotyczy problem, możesz połączyć oba rozwiązania, zapewniając domyślną wartość bezpośrednio w jednostce i lokalne zastąpienie w innym pliku.
sysconfig
ścieżka jest specyficzna dla Fedory, ale pytanie dotyczy Arch Linux. Myślę, że odpowiedź paluh jest bardziej interesująca