Obtendo o id do processo fora do comando lançado com “su -c”

8

Estou executando um programa java dentro de um shell e gravando o id do processo em um arquivo de texto. Então, quando eu faço isso:

nohup java app.Main > /dev/null 2>&1 &
echo $! > /var/run/app.pid

Funciona. Mas eu realmente quero executá-lo como outro usuário

su - appuser -c "nohup java app.Main > /dev/null 2>&1 &"
echo $! > /var/run/app.pid

Isso não funciona. Existe alguma maneira de obter o ID do processo do comando iniciado com a opção -c?

    
por Prasanth 01.08.2014 / 21:11

1 resposta

6

Você pode fazer:

su - appuser -c 'nohup java app.Main > /dev/null 2>&1 &
                 echo "$!"' > /var/run/app.pid

(que supõe que o shell de login de appuser é semelhante a Bourne).

su - redefine o ambiente, então se você quiser ter as variáveis expandidas na linha de comando, isso deve ser feito pelo seu shell (não pelo shell de login do usuário remoto) como:

su - appuser -c "nohup '$JAVA_BIN' '$JAVA_CLASS' > /dev/null 2>&1 &"'
                 echo "$!"' > /var/run/app.pid

(que assume que essas variáveis não contêm caracteres de aspas simples).

Você deseja que o redirecionamento seja executado pelo shell (em execução como root ), não pelo shell appuser (que provavelmente não tem permissão de gravação para /var/run ).

    
por 01.08.2014 / 21:46

Tags