GNU/Linux >> Linux Esercitazione >  >> Linux

Env Vars In /etc/environment non è visibile a livello globale?

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.
Correlati:Facebook:la scheda Foto non è visibile nel profilo di "Tutti"?
Linux
  1. @reboot non funziona in CRON

  2. Quando dovrei usare /dev/shm/ e quando dovrei usare /tmp/?

  3. /etc/passwd mostra l'utente in un gruppo, ma /etc/group no

  4. Differenza tra /etc/hosts e /etc/resolv.conf

  5. Come configurare /etc/issues per mostrare l'indirizzo IP per eth0

Il modo giusto per modificare i file /etc/passwd e /etc/group in Linux

Come viene aggiornato /etc/motd?

Fare riferimento a variabili d'ambiente *in* /etc/environment?

Comprendere i file /proc/mounts, /etc/mtab e /proc/partitions

Il file di servizio esiste ma non viene trovato da systemd

I siti web dovrebbero vivere in /var/ o /usr/ in base all'utilizzo consigliato?