Tentando obter o pid de um script executado como su -c

1

Estou tentando obter esses scripts para trabalhar em um ambiente em que o aplicativo java precise ser executado como usuário foobar , independentemente de ser iniciado como root ou foobar .

Estas são minhas modificações no script init , que é linkado por symlink de init.d :

RUN_USER=foobar
USER_NAME=$(id --user --name)
START_SCRIPT=/opt/app/scripts/start

ARGS=""

start() {
    if [ "$USER_NAME" != "$RUN_USER" ]; then
        PID=$(su $RUN_USER -c $START_SCRIPT $ARGS > /dev/null 2>&1 & echo $!)
    else
        PID='$START_SCRIPT $ARGS > /dev/null 2>&1 & echo $!'
    fi
}

E meu script /opt/app/scripts/start é assim:

exec java -jar /opt/app/app.jar > /dev/null 2>&1 & echo $!

Para tornar o script init , a variável PID precisa ser definida corretamente, mas está sendo definida para o comando PID do su . Existem várias perguntas sobre como fazer isso funcionar, mas nenhuma das soluções funciona para mim. Entendo que a parte > /dev/null 2>&1 & echo $! do meu comando su não funciona, mas não funciona quando eu altero para > /tmp/foobar (nenhum arquivo é gravado) e não sei como fazer isso trabalhos. O comando su sozinho ( su foobar -c /opt/app/scripts/start ) gerará o PID corretamente.

    
por Samuel Lindblom 01.07.2015 / 18:44

1 resposta

1

Você repetiu o script java pid dentro / opt / app / scripts / start que é verdadeiro, mas repetiu novamente o pid de su dentro do script de inicialização. Eu acho que você deveria mudar o script de inicialização assim:

start() {
if [ "$USER_NAME" != "$RUN_USER" ]; then
    PID=$(su $RUN_USER -c "$START_SCRIPT $ARGS")
else
    PID='$START_SCRIPT $ARGS'
fi
}
    
por 03.07.2015 / 11:10