Eu tenho um VPS com alguns aplicativos Java (criados com o "Play Framework") em execução nas portas 9000, 9001, 9002 e 9003. O Provedor VPS (iPage) reinicia servidores inesperadamente de tempos em tempos, deixando os quatro processos inativos.
Os processos que eu executo são iniciados por
nohup ./start -Dhttp.port=9000
,nohup ./start -Dhttp.port=9001
,nohup ./start -Dhttp.port=9002
enohup ./start -Dhttp.port=9003
com todos os quatro start
lançadores feitos por "Play" e localizados em pastas diferentes (dentro /opt
).
Cada vez que o iPage reinicia o meu VPS, todas as quatro pastas mantêm o arquivo 'RUNNING_PID' com o antigo PID, então eu tenho que excluir manualmente esses arquivos para poder colocá-los novamente.
Eu estava checando esta resposta de uma pergunta relativamente semelhante ( como eu escrevo um script bash para reiniciar um processo se ele morrer? ) (Sem especificação de porta e nohup
estilo, eu acho) sem sucesso.
Isto é o que eu fiz até agora:
Criou um
tryReboot
arquivo (salvo em/opt/myJavaApp9000/
) com o seguinte conteúdo:until start -Dhttp.port=9000; do echo "9000 process crashed with exit code $?. Respawning.." >&2 sleep 1 done
Adicionado
@reboot /opt/myJavaApp9000/tryReboot
aocrontab
arquivo usandocrontab -e
Após reiniciar o servidor (via iPage Reboot), todos os quatro mantiveram seus RUNNING_PID
arquivos, mas nenhum deles foi reiniciado. Qual poderia ser o problema?
chmod +x tryReboot
, mas não tinha percebido que o script não estava sendo executado. Quando eu faço./tryReboot
isso diz "./tryReboot: linha 4: erro de sintaxe próximo ao token inesperado 'pronto' ./tryReboot: linha 4: 'pronto'" ... Tornou otryReboot
mais simples e colocou: até o início; echo "O servidor 'myserver' travou com o código de saída $ ?. Respawning .."> & 2 sleep 5 done Sem nenhuma alteração. Quanto às suas outras perguntas, start é o lançador dos aplicativos Java que eu fiz (essa é a maneira Reproduzir Framework faz isso): SConsidere usar o monit . Ele foi projetado especificamente para esta tarefa. Não há necessidade de reinventar a roda.
simplesmente edite / etc / monit / monitrc, adicione o caminho ao seu script e pronto.
fonte