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

0

Estou tentando executar o Mule no 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 , pois quero que o Mule seja executado como usuário mule .

Quando eu chamo sudo service mule start , não vejo nada acontecendo, mas ao chamar sudo /etc/init.d/mule start , o Mule começa a funcionar bem.

Olhando para o script de inicialização para o Mule , na linha 419, o script é relançado 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 man page for service diz que remove a maioria das variáveis de ambiente. Então eu estou supondo que chamar su depende do ambiente de alguma forma.

    
por Indrek Ots 24.11.2015 / 12:27

1 resposta

0

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

A sinalização -m para su preserva o ambiente, portanto, quando chamei a variável de ambiente sudo /etc/init.d/mule start , a SHELL foi definida e passada para su .

Mas ao chamar sudo service mule start , o ambiente é limpo. De service man page:

% bl0ck_qu0te% Portanto, o ambiente não contém uma variável SHELL e o usuário mule também não possui um shell. Portanto, nenhum comando é executado, parece.

    
por Indrek Ots 24.11.2015 / 15:30