Comment rendre le service unix voir les variables d'environnement?

J'ai défini ma variable d'environnement en utilisant /etc/profile :

 export VAR=/home/userhome 

Ensuite, si je fais echo $VAR il montre /home/userhome

Mais quand je mets la reference à cette variable dans le file /etc/init.d/servicename , il ne peut pas find cette variable. Lorsque service servicename status utilisant le file /etc/init.d/servicename avec le contenu suivant:

 case "$1" in status) cd $VAR/dir ;; esac 

il indique /dir: No such file or directory

Mais cela fonctionne si /etc/init.d/servicename status lieu du /etc/init.d/servicename status du service servicename status

Comment puis-je faire un service unix voir les variables d'environnement?

Le problème est le service bandes toutes les variables d'environnement mais TERM , PATH et LANG qui est une bonne chose. Si vous exécutez le script directement, rien ne supprime les variables d'environnement, donc tout fonctionne.

Vous ne voulez pas countr sur des variables d'environnement externes car au démarrage, la variable d'environnement n'est probablement pas présente et votre système d'initialisation ne le définira probablement pas.

Si vous souhaitez toujours countr sur de telles variables, générez un file et lisez-en les variables, par exemple créez le file /etc/default/servicename avec le contenu:

 VAR=value 

et la source de votre script d'initialisation, par exemple:

 [ -f /etc/default/service-name ] && . /etc/default/service-name if [ -z "$VAR" ] ; then echo "VAR is not set, please set it in /etc/default/service-name" >&2 exit 1 fi case "$1" in status) cd "$VAR"/dir ;; esac 

Dans mon cas, j'avais besoin d'un RAILS_ENV qui était défini dans /etc/bash.bashrc : export RAILS_ENV=staging . J'ai ajouté $(grep RAILS_ENV /etc/bash.bashrc) et cela a rendu la variable disponible pour le script. Je l'ai fait de cette façon, donc je n'ai pas eu à inclure le rest du file.

Une solution laide qui fonctionnera aussi:

 function exec() { args=( $@ ) command=${args[0]} dummy=${args[1]} whoami=`whoami` if [ -z "$dummy" ]; then me=`basename $0` runuser -l ${whoami} -c "bash /etc/init.d/${me} ${command} dummy" else printenv fi } case $1 in status) status ;; start|stop|kill|restart) exec $* ;; *) usage esac