Przygotuj środowisko odczytu z / etc / environment dla usługi

17

Jaki jest najlepszy sposób, aby zapewnić zmienne środowiskowe zdefiniowane w /etc/environmentdo upstart usługi?

Wydaje mi się, że po prostu ich pozyskiwanie .w sekcji skryptu nie działa, ponieważ skrypty są wykonywane przez, shktóre wymagałyby dodatkowego exportprzed każdą definicją ...

Nikratio
źródło

Odpowiedzi:

16

W końcu dostałem odpowiedź na #upstartkanale IRC. W pewnym momencie upstart otrzyma odpowiednią obsługę PAM, a zatem /etc/environmentsam się przeczyta . Do tego czasu sztuczką jest wykonanie polecenia za pomocą su. suużywa PAM i skonfiguruje odpowiednie środowisko. Przykład:

script 
    exec su root -c /usr/sbin/job_needing_envs
end script
Nikratio
źródło
Dziękujemy za opublikowanie odpowiedzi, pomogłeś mi w dokładnie tym samym problemie.
Maxim Veksler,
błąd:su: must be run from a terminal
Kuf
3

Zwykle używam eval $(cat /etc/environment | sed 's/^/export /')

Pobiera każdą linię /etc/environment, dodaje exporti ocenia:

script
exec /bin/bash <<'EOT'
  eval $(cat /etc/environment | sed 's/^/export /')
  do_what_you_need_to
EOT
end script
Jrgns
źródło
Dlaczego używasz exec, a nie tylko umieszczasz eksport bezpośrednio w bloku skryptu?
Guss,
1

Dodaj to do skryptu:

. /etc/environment
export VAR1 VAR2 VAR3

gdzie potrzebne zmienne są określone zamiast symboli zastępczych w stylu „VAR1”.

Wstrzymano do odwołania.
źródło
2
W ten sposób muszę ręcznie zsynchronizować konfigurację początkową i środowisko / etc / w synchronizacji, co (moim zdaniem) nie jest lepsze niż dwukrotne zdefiniowanie zmiennych ...
Nikratio
Nie użyłbym /etc/environmentdo zdefiniowania wszystkich potrzebnych zmiennych. Pozostaw to jako plik statyczny. W moim systemie mogłem znaleźć tylko kilka skryptów, które i tak go używają. Utwórz plik o nazwie coś /etc/environment.locali umieścić swoje zmienne i eksportu tam i źródło , że plik. Następnie musisz zachować tylko ten jeden plik.
Wstrzymano do odwołania.
/ etc / environment jest odczytywany przez pam_env.so (a nie przez żadne skrypty), więc jest dostępny dla każdego logowania. Niestety, tylko programy uruchomione przez upstart nie mają dostępu do tego pliku przez defaulht.
Nikratio