Snažím se vytvořit systemd
služba;
Tato služba má skript, který má používat některé proměnné prostředí;
Tak jsem vytvořil toto:
cat /etc/systemd/system/atlantis-server.service
[Service]
ExecStart=/usr/local/bin/atlantis-server.sh
Což na to poukazuje
[email protected]:~$ cat /usr/local/bin/atlantis-server.sh
#!/bin/bash
source /etc/environment
atlantis server --atlantis-url="$URL" --gitlab-user="$USERNAME" --gitlab-token="$TOKEN" --gitlab-webhook-secret="$SECRET" --gitlab-hostname="$HOSTNAME" --repo-whitelist="$REPO_WHITELIST"
Čeho jsem si všiml (po některých chybách v mém systemd
logs) je, že jsem musel explicitně source /etc/environment
(zde jsou deklarovány výše uvedené proměnné).
Proč je to potřeba?
Nejsou globálně viditelné?
upravit :Přidání tohoto do definice služby problém nevyřešilo
Environment=/etc/environment
Přijatá odpověď:
/etc/environment
není globální konfigurační soubor.
Platí pouze na Linuxu; pouze k relacím PAM, jak to používá login
a tak dále; a pouze v případě, že je v systému nainstalován a povolen určitý zásuvný modul PAM a tento zásuvný modul PAM nebyl nakonfigurován pro použití jiného souboru (protože /etc/environment
je pouze výchozí, pokud není uvedeno jinak). Je to zásuvný modul PAM, který to čte.
Jinak je to jen nesmyslný soubor v /etc
že nic nepoužívá.
Zatímco mohli nastavit proměnné prostředí globálně v systemd-system.conf
, to platí pro všechny služby, nejen ty, které chcete změnit.
Podobně, zatímco EnvironmentFile
v příslušné servisní jednotce (jednotkách) je způsob, jak nechat systemd přečíst společný soubor se seznamem definic proměnných prostředí, lidé ze systemd jeho použití odrazují. Týkají se EnvironmentFile
jako špatný nápad a jeho použití jako omyl.
Správný způsob, jak to udělat podle lidí ze systému, je nastavit každou proměnnou v servisní jednotce pomocí Environment
nastavení, které obsahuje skutečný název a hodnotu proměnné prostředí nastavit, nikoli název souboru. To může být buď přímo v příslušné servisní jednotce, pokud jako zde zapisujete vlastní servisní jednotku, která se má umístit do /etc
; nebo být v .conf
override file, pokud upravujete předem zabalenou servisní jednotku v /lib
nebo /usr/lib
.
Další čtení
- https://unix.stackexchange.com/a/419061/5132
- Lennart Poettering a kol. (2016).
systemd-system.conf
. systémové manuálové stránky. Freedesktop.org. - Lennart Poettering a kol. (2016).
systemd.exec
. systémové manuálové stránky. Freedesktop.org. - Andrew G. Morgan a Thorsten Kukuk (srpen 2010). „pam_env — nastavení/zrušení proměnných prostředí“. Příručka správce systému Linux-PAM . linux-pam.org.