O serviço não inicia ao usar o utilitário de serviço, mas funciona ao chamar diretamente o script de inicialização

O serviço não inicia ao usar o utilitário de serviço, mas funciona ao chamar diretamente o script de inicialização

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_USERporque quero que o Mule seja executado como user mule.

Quando ligo, sudo service mule startnã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 sudepende de alguma forma do ambiente.

Responder1

O problema era que o usuário mulenão tinha shell. Foi definido como /bin/false.

O -msinalizador supreserva o ambiente, então quando chamei sudo /etc/init.d/mule starta SHELLvariável de ambiente foi definida e passada para su.

Mas ao ligar sudo service mule starto ambiente é limpo. Da servicepá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 SHELLvariável e o usuário muletambém não possui um shell. Portanto, nenhum comando é executado, ao que parece.

informação relacionada