GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Env Vars in /etc/environment nicht global sichtbar?

Ich versuche, ein systemd zu erstellen Dienst;

Dieser Dienst hat ein Skript, das einige Umgebungsvariablen verwenden soll;

Also habe ich das erstellt:

cat /etc/systemd/system/atlantis-server.service 
[Service]
ExecStart=/usr/local/bin/atlantis-server.sh

Was darauf hindeutet

[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"

Was mir aufgefallen ist (nach einigen Fehlern in meiner systemd logs) ist, dass ich explizit source /etc/environment musste

(Hier werden die obigen Variablen deklariert).

Warum wird das benötigt?

Sind sie nicht weltweit sichtbar?

bearbeiten :Das Hinzufügen zur Dienstdefinition hat das Problem nicht gelöst

Environment=/etc/environment

Akzeptierte Antwort:

/etc/environment ist keine globale Konfigurationsdatei.

Es gilt nur unter Linux; nur zu PAM-Sitzungen, wie sie von login verwendet werden und so weiter; und nur für den Fall, dass ein bestimmtes PAM-Plug-in auf dem System installiert und aktiviert ist und dieses PAM-Plug-in nicht für die Verwendung einer anderen Datei konfiguriert wurde (weil /etc/environment ist lediglich seine Vorgabe, wenn ihm nichts anderes mitgeteilt wird). Es ist dieses PAM-Plug-in, das es liest.

Andernfalls ist es nur eine bedeutungslose Datei in /etc das nichts nutzt.

Während Sie könnten Umgebungsvariablen global in systemd-system.conf setzen , dies gilt für alle Dienste, nicht nur diejenigen, die Sie ändern möchten.

Ebenso während eine EnvironmentFile in der/den entsprechenden Diensteinheit(en) eine Möglichkeit bietet, systemd eine gemeinsame Datei mit einer Liste von Umgebungsvariablendefinitionen lesen zu lassen, raten die Systemd-Leute von ihrer Verwendung ab. Sie betrachten EnvironmentFile als schlechte Idee und ihre Verwendung als Fehler.

Der richtige Weg, dies gemäß den systemd-Leuten zu tun, besteht darin, jede Variable in der Service-Unit mit einer Environment zu setzen -Einstellung, die den tatsächlichen Namen und Wert der Umgebungsvariablen enthält gesetzt werden, kein Dateiname. Das kann entweder direkt in der jeweiligen Service-Unit sein, wenn man wie hier eine eigene Service-Unit schreibt, die in /etc platziert werden soll; oder in einer .conf sein override-Datei, wenn man eine vorgefertigte Service-Unit in /lib anpasst oder /usr/lib .

Weiterführende Literatur

  • https://unix.stackexchange.com/a/419061/5132
  • Lennart Pöttering et al. (2016). systemd-system.conf . systemd Handbuchseiten. Freedesktop.org.
  • Lennart Pöttering et al. (2016). systemd.exec . systemd Handbuchseiten. Freedesktop.org.
  • Andrew G. Morgan und Thorsten Kukuk (August 2010). „pam_env – set/unset Umgebungsvariablen“. Das Handbuch für Linux-PAM-Systemadministratoren . linux-pam.org.
Verwandt:Facebook:Fotos-Tab im Profil für „Jeder“ nicht sichtbar?
Linux
  1. @reboot funktioniert nicht in CRON

  2. Wann sollte ich /dev/shm/ verwenden und wann sollte ich /tmp/?

  3. /etc/passwd zeigt Benutzer in einer Gruppe an, /etc/group jedoch nicht

  4. Was ist die Verbindung zwischen den Verzeichnissen /etc/init.d und /etc/rcX.d in Linux?

  5. Verwenden von systemd-Timern anstelle von cron

Der richtige Weg zum Bearbeiten von /etc/passwd- und /etc/group-Dateien unter Linux

Umgebungsvariablen *in* /etc/environment referenzieren?

CentOS / RHEL:So stellen Sie eine gelöschte /etc/passwd-Datei wieder her

Die Dateien /proc/mounts, /etc/mtab und /proc/partitions verstehen

Unterschied zwischen /etc/hosts und /etc/resolv.conf

So richten Sie /etc/issues ein, um die IP-Adresse für eth0 anzuzeigen