
Estou tentando correrMulano Ubuntu 14.04 como um serviço. Eu criei o seguinte script de inicialização ( /etc/init.d/mule
)
#!/bin/bash
JAVA_HOME=/usr/lib/jvm/java-8-oracle
PATH=$PATH:$JAVA_HOME/bin
# Set Mule related environment
MULE_HOME=/opt/mule
PATH=$PATH:$MULE_HOME/bin
RUN_AS_USER=mule
# Export environment variables
export JAVA_HOME MULE_HOME RUN_AS_USER PATH
# Invoke Mule
$MULE_HOME/bin/mule $1
Aqui eu defino algumas variáveis de ambiente, principalmente RUN_AS_USER
porque quero que o Mule seja executado como user mule
.
Quando ligo, sudo service mule start
não vejo nada acontecendo, mas ao ligar sudo /etc/init.d/mule start
, o Mule começa a funcionar bem.
Olhando para oscript de inicializaçãopara Mule, na linha 419 o script é reiniciado se precisar ser executado como outro usuário.
RELAUNCH_CMD="$REALPATH $@"
su -m $RUN_AS_USER -c "$RELAUNCH_CMD"
Por que é que ao chamar o script de inicialização diretamente, o Mule começa a funcionar bem, mas ao usar o utilitário de serviço, nada acontece? A página de manual do serviço diz que remove a maioria das variáveis de ambiente. Então, acho que a chamada su
depende de alguma forma do ambiente.
Responder1
O problema era que o usuário mule
não tinha shell. Foi definido como /bin/false
.
O -m
sinalizador su
preserva o ambiente, então quando chamei sudo /etc/init.d/mule start
a SHELL
variável de ambiente foi definida e passada para su
.
Mas ao ligar sudo service mule start
o ambiente é limpo. Da service
página de manual:
service executa um script de inicialização do System V ou um trabalho inicial em um ambiente tão previsível quanto possível, removendo a maioria das variáveis de ambiente e com o diretório de trabalho atual definido como /.
Portanto o ambiente não contém uma SHELL
variável e o usuário mule
também não possui um shell. Portanto, nenhum comando é executado, ao que parece.