Avoir un environnement de lecture parvenu à partir de / etc / environment pour un service

17

Quelle est la meilleure façon de fournir les variables d'environnement définies dans /etc/environmentun service parvenu ?

Je pense que le simple fait de les rechercher .dans une section de script ne fonctionne pas, car les scripts sont exécutés par shlesquels il faudrait un supplément exportdevant chaque définition ...

Nikratio
la source

Réponses:

16

J'ai finalement obtenu une réponse sur le #upstartcanal IRC. À un certain point, upstart obtiendra le support PAM approprié et se lira ainsi /etc/environment. Jusque-là, l'astuce consiste à exécuter la commande avec su. suutilise PAM et mettra en place l'environnement approprié. Exemple:

script 
    exec su root -c /usr/sbin/job_needing_envs
end script
Nikratio
la source
Merci d'avoir posté la réponse, vous m'avez aidé dans exactement le même problème.
Maxim Veksler
erreur:su: must be run from a terminal
Kuf
3

J'ai tendance à utiliser eval $(cat /etc/environment | sed 's/^/export /')

Il prend chaque ligne /etc/environment, l'ajoute exportet l'évalue:

script
exec /bin/bash <<'EOT'
  eval $(cat /etc/environment | sed 's/^/export /')
  do_what_you_need_to
EOT
end script
Jrgns
la source
Pourquoi utilisez-vous exec et ne pas simplement mettre l'exportation directement dans le bloc de script?
Guss
1

Ajoutez ceci à votre script:

. /etc/environment
export VAR1 VAR2 VAR3

où les variables dont vous avez besoin sont spécifiées à la place des espaces réservés de style "VAR1".

En pause jusqu'à nouvel ordre.
la source
2
De cette façon, je dois synchroniser manuellement la configuration de démarrage et / etc / environnement, ce qui (à mon avis) n'est pas mieux que de définir les variables deux fois ...
Nikratio
Je n'utiliserais pas /etc/environmentpour définir toutes vos variables nécessaires. Laissez cela comme un fichier statique. Sur mon système, je n'ai pu trouver que quelques scripts qui l'utilisent de toute façon. Créez un fichier appelé quelque chose comme /etc/environment.localet mettez vos variables et exportations dedans et sourcez ce fichier. Ensuite , il suffit de maintenir ce un fichier.
pause jusqu'à nouvel ordre.
/ etc / environment est lu par pam_env.so (et non par aucun script), il est donc disponible pour toute connexion. Seuls les programmes démarrés par upstart n'ont malheureusement pas accès à ce fichier par défaut.
Nikratio