Eu tenho a seguinte nova linha no meu arquivo .sh
su --session-command='$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile' $serviceUser || return 1
Quando eu tinha aspas duplas, funcionou um pouco, mas o pidFile tinha o pid errado e estava errado por um. A solução da pesquisa foi usar aspas simples e não consigo fazer aspas simples funcionarem.
Eu recebo agora 2 erros
bash: $pidFile: redirecionamento ambíguo
bash: $serviceLogFile: redirecionamento ambíguo
Parece que não posso usar variáveis ou gerar variáveis entre aspas simples?
Esta linha quase funciona, mas o pid está desativado em um.
Este código abaixo iniciaria na inicialização, mas o pid está errado.
su --session-command="$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1
que teve que substituir esse código antigo de 2 linhas com erros.
cmd="nohup $javaCommandLine >>$serviceLogFile 2>&1 & echo \$! >$pidFile"
# Don't forget to add -H so the HOME environment variable will be set correctly.
sudo -u $serviceUser -H $SHELL -c "$cmd" || return 1
O código antigo funcionou bem, mas não pôde ser iniciado na inicialização.
Responder1
O ID do processo está desativado em um porque você colocou um extra &
após o $javaCommandLine
. Em outras palavras, você colocou dois processos em segundo plano antes de chamar echo $!
, obtendo assim o PID >>$serviceLogFile 2>&1
em vez de $javaCommandLine
. Essas duas peças devem ser colocadas em uma, como mostra o antigo código de 2 linhas
su --session-command="$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1
Talvez seja necessário alterá-lo para -
su --session-command="$javaCommandLine >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1