web-dev-qa-db-fra.com

"Service" -Command et variables d'environnement

J'essaie de créer un service qui nécessite une env. variable à régler sur certains chemins. J'ai défini cette variable dans "/etc/profile.d/". Cependant, lorsque je démarre ce service à l'aide de la commande service, cela ne fonctionne pas.

Service de l'homme:

service runs a System V init script in as predictable environment as possible,
removing most environment variables and with current working directory set to /.

Donc, il semble que service retire mes variables. Comment dois-je définir les variables pour les empêcher d'être supprimé? Ou est-ce quelque chose que je devrait ne pas faire.

I pourrait Démarrer le service manuellement à l'aide des scripts init, ou même du capital du trajet dans le script, mais j'aimerais savoir comment l'utiliser avec la commande service.

8
Esa Varemo

À partir de Fedora 16, service _ n'accepte que LANG et TERM variables d'environnement, tout est rejeté. Donc, même si votre {Centos, Rhel} Accepte les variables, soyez préparé pour l'avenir où il ne fonctionne plus.

Donc, codant dur le script init et/ou la configuration des variables dans le fichier de paramètres du démon lui-même serait vos choix.

4
Janne Pikkarainen

Il est recommandé de placer les paramètres de configuration dans une configuration dans /etc/sysconfig/<servicename> qui est ensuite lu par le script init.

Salutations

Brouillard

6
Bram

À partir de man 5 init:

 Environnement de travail [.____] Chaque travail est géré avec l'environnement des événements ou des commandes qui l'ont amené. De plus, vous pouvez définir des valeurs par défaut dans le travail 
 Qui peut être remplacé ultérieurement et spécifier quelles variables d'environnement sont exportées dans les événements générés pour le travail. [.____] [.____] la variable d'environnement disponible spéciale contient la liste des événements qui ont commencé le travail, il ne sera pas présent si le travail 
 a été démarré manuellement. 
 [.____] En outre, les scripts de pré-arrêt et de post-arrêt sont Courez avec l'environnement des événements ou des commandes qui ont arrêté le travail. 
 La variable d'environnement UPSTART_STOP_EVENTS contient la liste des événements qui ont arrêté le travail, il ne sera pas présent si le travail [.____] a été arrêté manuellement. [ Sur le travail, les commandes sont appelées à partir de. [.____] 
 clé ENV [= valeur] [.____] définit une variable d'environnement par défaut, la valeur qui peut être remplacée par l'événement ou la commande qui commence le travail. [.____] Si'key = la valeur est spécifiée, la variable La clé est donnée la valeur de la valeur. Si seulement la "key "est donnée, la valeur est prise [.____] de l'environnement initial (8) du démon. 
 
 Touche d'exportation 
 Exporte la valeur d'un Environnement variable dans le démarrage (7), a commencé (7), arrêt (7) et arrêté (7) événements pour cela 
 Job et à tous les événements résultants (pas seulement ceux relatifs au travail actuel). 

De plus, vous pouvez faire grep env /etc/init/* Pour voir comment est utilisé

Ceci est ma sortie:

[.____]/etc/init/conteneur-détecte.conf: enveloppe Environ [.____]/etc/init/conteneur-détecte.conf: env libvirt_lxc_uuid 
/etc Conf: # est de vérifier "conteneur" dans l'environnement init. 
/etc/init/conteneur-détecte.conf: [-D/proc/vz] && [! -d/proc/bc] && conteneur = openvz 
/etc/init/monté-debugfs.conf: env ai lieu de montage =/sys/noyau/débogage [.____]/etc/init/monté-dev. Conf: env Uspoint =/dev [.____]/etc/init/monté-proc.cconf: env Uspoint =/Proc [.____]/etc/init/monté-tmb.conf: env Upoint =/TMP [ .____]/etc/init/munin-node.conf: env Daemon =/USR/sbin/munin-noeud [.____]/etc/init/mysql.conf: env Accation =/etc/mySQL 
/etc/init/nginx.conf: env Daemon =/usr/local/nginx/sbin/nginx [.____]/etc/init/nginx.conf: env pid =/USR/local/nginx/Local/nginx.pid [.____]/etc/init/procps.conf: env UpStart_events = [.____]/etc/init/rc.conf: env init_verbose [.____]/etc/init/rc-sysinit. CONF: ENV DEFAULT_RUNLEVELL = 2 [.____]/etc/init/rc-sysinit.conf: env Runlevel. [.____]/etc/init/rc-sysinit.conf: env arevlevel = [ etc/init/rc-sysinit.conf: env init_verbose [.____]/etc/init/wait-wait-foret-state.conf: enveloppe Environ = 30 [.____]/etc/init/attendre. conf: env: env Manual_override = "n" [.____]/etc/init/wait-wait-for-stiner.conf: env wait_forever = "n" [.____]/etc/init/wai t-for-state.conf: env wait_state = "commencé" [.____]/etc/init/wait-wait-foret.conf: env Target_goal = "Démarrer" [.____]

Et pour un exemple exhaustif, voir une partie de ces scripts. Ici nginx.conf:

 # nginx [.____] 
 Description "Démon HTTP NGinx" 
 Auteur "Philipp Klose" [.____ Device-up iface = lo) 
 Arrêtez-vous sur runlevel [! 2345] 
 [.____] env Daemon =/USR/local/nginx/sbin/nginx [.____] env pid = /usr/Local/nginx/logs/nginx.pid

Etpect fourchette 
 RESPOWN [.____] RESPOWN LIMIT 10 5 [.____] # OOM JAMAIS 
 
 Script de pré-démarrage 
 $ Daemon -t 
 Si [$? -ne 0] [.____] alors sortez $? 
 fi 
 Script final 
 [.____] EXED $ DAUION [.____]
2
jperelli