“serviço” - comando e variáveis de ambiente

8

Estou tentando iniciar um serviço que requer um env. variável a ser definida para determinado caminho. Eu configurei essa variável em "/etc/profile.d/". No entanto, quando eu inicio este serviço usando o comando service , ele não funciona.

serviço de homem:

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

Portanto, parece que service está removendo minhas variáveis. Como devo definir as variáveis para evitar que sejam removidas? Ou é algo que eu não deveria não fazer.

Eu poderia iniciar o serviço manualmente usando os scripts init, ou até mesmo codificar o caminho para o script, mas gostaria de saber como usá-lo com o comando service .

    
por Esa Varemo 28.03.2012 / 15:57

3 respostas

4

A partir do Fedora 16, service aceita apenas as variáveis de ambiente LANG e TERM , todo o resto é descartado. Então, mesmo que o seu atual {CentOS, RHEL} aceite as variáveis de alguma forma, esteja preparado para o futuro onde ele não funciona mais.

Assim, codificar o script de inicialização e / ou configurar as variáveis no próprio arquivo de configurações do daemon seriam suas escolhas.

    
por 28.03.2012 / 16:07
6

Recomenda-se colocar as configurações em uma configuração em /etc/sysconfig/<servicename> , que é então lida pelo script de inicialização.

Atenciosamente

Bram

    
por 16.04.2012 / 08:54
2

De man 5 init :

   Job environment
       Each  job  is run with the environment from the events or commands that started it.  In addition, you may define defaults in the
       job which may be overridden later and specify which environment variables are exported into the events generated for the job.

       The special UPSTART_EVENTS environment variable contains the list of events that started the job, it will not be present if  the
       job was started manually.

       In  addition,  the  pre-stop  and post-stop scripts are run with the environment of the events or commands that stopped the job.
       The UPSTART_STOP_EVENTS environment variable contains the list of events that stopped the job, it will not be present if the job
       was stopped manually.

       All  jobs  also contain the UPSTART_JOB and UPSTART_INSTANCE environment variables, containing the name of the job and instance.
       These are mostly used by the initctl(8) utility to default to acting on the job the commands are called from.

       env KEY[=VALUE]
              Defines a default environment variable, the value of which may be overriden by the event or command that starts the  job.
              If  ´KEY=VALUE´ is specified, the variable KEY is given the value VALUE.  If only ´KEY´ is given, then the value is taken
              from the init(8) daemon's own environment.

       export KEY
              Exports the value of an environment variable into the starting(7), started(7), stopping(7) and stopped(7) events for this
              job and to all resultant events (not just those relating to the current job).

Você também pode fazer grep env /etc/init/* para ver como é usado

Esta é minha saída:

/etc/init/container-detect.conf:env container
/etc/init/container-detect.conf:env LIBVIRT_LXC_UUID
/etc/init/container-detect.conf:    # is to check for "container" in init's environment.
/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="started"
/etc/init/wait-for-state.conf:env TARGET_GOAL="start"

E, para um exemplo exaustivo, veja alguns desses scripts. Aqui nginx.conf:

# nginx

description "nginx http daemon"
author "Philipp Klose "

start on (filesystem and net-device-up IFACE=lo)
stop on runlevel [!2345]

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

expect fork
respawn
respawn limit 10 5
#oom never

pre-start script
 $DAEMON -t
 if [ $? -ne 0 ]
 then exit $?
 fi
end script

exec $DAEMON
    
por 18.02.2013 / 19:26