Starten Sie die Leseumgebung aus / etc / environment für einen Dienst

17

Wie können die in definierten Umgebungsvariablen am besten /etc/environmentfür einen Upstart- Service bereitgestellt werden?

Ich denke, sie einfach mit .in einem Skriptabschnitt zu beschaffen, funktioniert nicht, weil die Skripte ausgeführt werden, von shdenen ein zusätzlicher exportvor jeder Definition benötigt würde ...

Nikratio
quelle

Antworten:

16

Ich habe endlich eine Antwort im #upstartIRC-Kanal bekommen. Irgendwann wird Upstart die richtige PAM-Unterstützung erhalten und sich somit /etc/environmentselbst lesen . Bis dahin besteht der Trick darin, den Befehl mit su auszuführen. suverwendet PAM und richtet die richtige Umgebung ein. Beispiel:

script 
    exec su root -c /usr/sbin/job_needing_envs
end script
Nikratio
quelle
Vielen Dank, dass Sie die Antwort gepostet haben. Sie haben mir in genau der gleichen Angelegenheit geholfen.
Maxim Veksler
Fehler:su: must be run from a terminal
Kuf
3

Ich neige dazu, zu verwenden eval $(cat /etc/environment | sed 's/^/export /')

Es nimmt jede Zeile auf /etc/environment, stellt sie voran exportund wertet sie aus:

script
exec /bin/bash <<'EOT'
  eval $(cat /etc/environment | sed 's/^/export /')
  do_what_you_need_to
EOT
end script
Jrgns
quelle
Warum benutzt du exec und fügst den Export nicht einfach direkt in den Skriptblock ein?
Guss
1

Fügen Sie dies Ihrem Skript hinzu:

. /etc/environment
export VAR1 VAR2 VAR3

Anstelle der Platzhalter im "VAR1" -Stil werden die von Ihnen benötigten Variablen angegeben.

Bis auf weiteres angehalten.
quelle
2
Auf diese Weise muss ich die Startkonfiguration und / etc / environment manuell synchron halten, was meiner Meinung nach nicht besser ist, als die Variablen zweimal zu definieren ...
Nikratio
Ich würde nicht verwenden /etc/environment, um alle benötigten Variablen zu definieren. Belassen Sie das als statische Datei. Auf meinem System konnte ich nur wenige Skripte finden, die es trotzdem verwenden. Erstellen Sie eine Datei mit dem Namen "so etwas wie" /etc/environment.localund speichern Sie Ihre Variablen und Exporte dort und geben Sie den Quellcode für diese Datei ein. Dann müssen Sie nur diese eine Datei pflegen .
Bis auf weiteres angehalten.
/ etc / environment wird von pam_env.so (und nicht von Skripten) gelesen und steht daher für jede Anmeldung zur Verfügung. Nur von upstart gestartete Programme haben leider standardmäßig keinen Zugriff auf diese Datei.
Nikratio