"Servicio" -command y variables de entorno

8

Estoy tratando de iniciar un servicio que requiere un env. variable que se establecerá en cierta ruta. Configuré esta variable en "/etc/profile.d/". Sin embargo, cuando inicio este servicio usando el servicecomando, no funciona.

servicio de hombre:

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

Entonces parece que serviceestá eliminando mis variables. ¿Cómo debo configurar las variables para evitar que se eliminen? ¿O es algo que no debería hacer?

Yo podría iniciar el servicio manualmente utilizando el guión la palabra, o incluso codificar la ruta en el guión, pero me gustaría saber cómo usarlo con el servicecomando.

Esa Varemo
fuente

Respuestas:

4

A partir de Fedora 16, servicesolo acepta LANGy TERMvariables de entorno, todo lo demás se descarta. Por lo tanto, incluso si su {CentOS, RHEL} actual acepta las variables de alguna manera, prepárese para el futuro donde ya no funcione.

Por lo tanto, codificar el script de inicio y / o configurar las variables en el archivo de configuración del demonio sería su elección.

Janne Pikkarainen
fuente
La desventaja es que cada vez que actualizo la aplicación tengo que cambiar el archivo, pero supongo que solo tengo que ... (... no actualizar con frecuencia)
Esa Varemo
Bueno, la "actualización a menudo" es una norma hoy en día. Vive con ello.
Janne Pikkarainen
6

Se recomienda colocar los ajustes de configuración en una configuración /etc/sysconfig/<servicename>que luego se lee mediante el script de inicio.

Saludos

Bram

Bram
fuente
Como otro consejo en el /etc/sysconfig/<servicename>archivo, puede usar bash sourcepara cargar archivos /etc/profile.dpara imitar el entorno de inicio de sesión de shell.
Adam Gent
2

De man 5 init:

   Ambiente de trabajo
       Cada trabajo se ejecuta con el entorno desde los eventos o comandos que lo iniciaron. Además, puede definir valores predeterminados en
       trabajo que puede anularse más adelante y especificar qué variables de entorno se exportan a los eventos generados para el trabajo.

       La variable de entorno especial UPSTART_EVENTS contiene la lista de eventos que iniciaron el trabajo, no estará presente si el
       El trabajo se inició manualmente.

       Además, los scripts previos y posteriores se ejecutan con el entorno de los eventos o comandos que detuvieron el trabajo.
       La variable de entorno UPSTART_STOP_EVENTS contiene la lista de eventos que detuvieron el trabajo, no estará presente si el trabajo
       fue detenido manualmente.

       Todos los trabajos también contienen las variables de entorno UPSTART_JOB y UPSTART_INSTANCE, que contienen el nombre del trabajo y la instancia.
       Estos son utilizados principalmente por la utilidad initctl (8) para actuar de manera predeterminada en el trabajo desde el que se llaman los comandos.

       CLAVE env [= VALOR]
              Define una variable de entorno predeterminada, cuyo valor puede ser anulado por el evento o comando que inicia el trabajo.
              Si se especifica "CLAVE = VALOR", la variable CLAVE recibe el valor VALOR. Si solo se da ´KEY´, entonces se toma el valor
              del entorno del demonio init (8).

       clave de exportación
              Exporta el valor de una variable de entorno en los eventos inicial (7), iniciado (7), detenido (7) y detenido (7) para este
              trabajo y a todos los eventos resultantes (no solo los relacionados con el trabajo actual).

Además, puede hacer grep env /etc/init/*para ver cómo se usa

Esta es mi salida:

/etc/init/container-detect.conf:env container
/etc/init/container-detect.conf:env LIBVIRT_LXC_UUID
/etc/init/container-detect.conf: # es buscar "contenedor" en el entorno de init.
/etc/init/container-detect.conf: [-d / proc / vz] && [! -d / proc / bc] && container = openvz
/etc/init/mounted-debugfs.conf:env MOUNTPOINT = / sys / kernel / debug
/etc/init/mounted-dev.conf:env MOUNTPOINT = / dev
/etc/init/mounted-proc.conf:env MOUNTPOINT = / proc
/etc/init/mounted-tmp.conf:env MOUNTPOINT = / tmp
/etc/init/munin-node.conf:env DAEMON = / usr / sbin / munin-node
/etc/init/mysql.conf:env HOME = / etc / mysql
/etc/init/nginx.conf:env DAEMON = / usr / local / nginx / sbin / nginx
/etc/init/nginx.conf:env PID = / usr / local / nginx / logs / nginx.pid
/etc/init/procps.conf:env UPSTART_EVENTS =
/etc/init/rc.conf:env INIT_VERBOSE
/etc/init/rc-sysinit.conf:env DEFAULT_RUNLEVEL = 2
/etc/init/rc-sysinit.conf:env RUNLEVEL =
/etc/init/rc-sysinit.conf:env PREVLEVEL =
/etc/init/rc-sysinit.conf:env INIT_VERBOSE
/etc/init/wait-for-state.conf:env TIMEOUT = 30
/etc/init/wait-for-state.conf:env MANUAL_OVERRIDE = "N"
/etc/init/wait-for-state.conf:env WAIT_FOREVER = "N"
/etc/init/wait-for-state.conf:env WAIT_STATE = "iniciado"
/etc/init/wait-for-state.conf:env TARGET_GOAL = "inicio"

Y para un ejemplo exhaustivo, vea algunos de esos scripts. Aquí nginx.conf:

# nginx

descripción "nginx http daemon"
autor "Philipp Klose"

iniciar en (sistema de archivos y net-device-up IFACE = lo)
detenerse en el nivel de ejecución [! 2345]

env DAEMON = / usr / local / nginx / sbin / nginx
PID env = / usr / local / nginx / logs / nginx.pid

esperar tenedor
reaparecer
límite de reaparición 10 5
# nunca nunca

guión preinicio
 $ DAEMON -t
 si [$? -ne 0]
 entonces salga $?
 fi
fin de guión

exec $ DAEMON
jperelli
fuente