Sto cercando di creare un systemd
servizio;
Questo servizio ha uno script che dovrebbe utilizzare alcune variabili di ambiente;
Quindi ho creato questo:
cat /etc/systemd/system/atlantis-server.service
[Service]
ExecStart=/usr/local/bin/atlantis-server.sh
Il che indica questo
[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"
Cosa ho notato (dopo alcuni errori nel mio systemd
logs) è che dovevo esplicitamente source /etc/environment
(è qui che vengono dichiarate le var sopra).
Perché è necessario?
Non sono visibili a livello globale?
modifica :l'aggiunta di questo alla definizione del servizio non ha risolto il problema
Environment=/etc/environment
Risposta accettata:
/etc/environment
non è un file di configurazione globale.
Si applica solo su Linux; solo alle sessioni PAM, come impiegato da login
e così via; e solo nel caso in cui un particolare plug-in PAM sia installato e abilitato sul sistema e tale plug-in PAM non sia stato configurato per utilizzare qualche altro file (perché /etc/environment
è semplicemente il suo valore predefinito se non viene detto diversamente). È quel plug-in PAM che lo legge.
Altrimenti, è solo un file senza significato in /etc
che niente usa.
Mentre tu potresti imposta le variabili di ambiente a livello globale in systemd-system.conf
, questo vale per tutti servizi, non solo a quelli che vuoi cambiare.
Allo stesso modo, mentre un EnvironmentFile
nelle unità di servizio appropriate è un modo per far leggere a systemd un file comune con un elenco di definizioni di variabili di ambiente, le persone di systemd ne sconsigliano l'uso. Riguardano EnvironmentFile
come una cattiva idea e il suo utilizzo come un errore.
Il modo corretto per farlo per le persone di sistema è impostare ogni variabile nell'unità di servizio con un Environment
impostazione, che contiene il nome e il valore effettivi della variabile di ambiente da impostare, non un nome file. Questo può essere sia direttamente nell'unità di servizio pertinente, se come qui si sta scrivendo la propria unità di servizio da inserire in /etc
; o essere in un .conf
sovrascrivere il file, se si sta modificando un'unità di servizio preconfezionata in /lib
o /usr/lib
.
Ulteriori letture
- https://unix.stackexchange.com/a/419061/5132
- Lennart Poettering et al. (2016).
systemd-system.conf
. pagine di manuale di sistema. Freedesktop.org. - Lennart Poettering et al. (2016).
systemd.exec
. pagine di manuale di sistema. Freedesktop.org. - Andrew G. Morgan e Thorsten Kukuk (agosto 2010). "pam_env — imposta/non imposta variabili di ambiente". Guida per gli amministratori di sistema Linux-PAM . linux-pam.org.