Estou procurando uma maneira de monitorar um processo e reiniciar o executável se o processo morrer por qualquer motivo. O Linux possui uma ferramenta interna que pode fazer isso?
Se for iniciado a partir do init, você poderá reaparecer pelo init. Defina a ação para o processo 'reaparecer' para os níveis de execução em que você deseja o processo.
#!/bin/bash
while ! <<command>>
do
sleep 1
echo "Restarting program..."
done
Substitua <<command>>pelo comando que você deseja executar. O processo precisa terminar com o código de saída zero para interromper o loop. Caso contrário, ele será reiniciado pelo script.
Agradável. Isso funciona com o ksh também, e eu mudaria o comando "echo" para um "logger" para colocar a mensagem nos logs do sistema.
Mei
Resposta perfeita, mano.
Arunjith RS 30/04/19
4
Deseja apenas reiniciá-lo se morrer? O problema é que ele não lida com situações em que congela. Portanto, apenas verificar o processo nem sempre ajuda. Portanto, se isso é algo como um servidor da web, você deseja que um script o verifique da perspectiva do usuário.
Se você configurar o Nagios Monitoring, poderá usar manipuladores de eventos . Esses são apenas os scripts que você escreve que serão executados quando o serviço for desativado; portanto, você pode ter um que reinicie algo como o Apache se o site estiver inativo.
+1, lembre-se de cobrir também situações em que ele é intencionalmente morto.
Maximus Minimus
Bom ponto, embora no meu caso o processo simplesmente desaparece
baiacu
3
Dependendo da distribuição, mas usamos com êxito "monit" para esta tarefa. É bem fácil. Você pode escrever seus próprios cheques, monitorar o processo PID, etc.
Arquivo monitrc de exemplo:
check process sshd with pidfile /var/run/sshd.pid
start program "/etc/init.d/ssh start"
stop program "/etc/init.d/ssh stop"
if failed port 22 protocol ssh then restart
if 5 restarts within 5 cycles then timeout
Resposta curta: você está completamente errado. Resposta longa: se uma distribuição Linux não tiver inittab, ela terá /etc/event.d/ - qualquer mecanismo reiniciará um processo quando morrer.
Respostas:
Se for iniciado a partir do init, você poderá reaparecer pelo init. Defina a ação para o processo 'reaparecer' para os níveis de execução em que você deseja o processo.
fonte
Eu já respondi uma pergunta semelhante antes .
No seu caso:
Substitua
<<command>>
pelo comando que você deseja executar. O processo precisa terminar com o código de saída zero para interromper o loop. Caso contrário, ele será reiniciado pelo script.fonte
Deseja apenas reiniciá-lo se morrer? O problema é que ele não lida com situações em que congela. Portanto, apenas verificar o processo nem sempre ajuda. Portanto, se isso é algo como um servidor da web, você deseja que um script o verifique da perspectiva do usuário.
Se você configurar o Nagios Monitoring, poderá usar manipuladores de eventos . Esses são apenas os scripts que você escreve que serão executados quando o serviço for desativado; portanto, você pode ter um que reinicie algo como o Apache se o site estiver inativo.
fonte
Dependendo da distribuição, mas usamos com êxito "monit" para esta tarefa. É bem fácil. Você pode escrever seus próprios cheques, monitorar o processo PID, etc.
Arquivo monitrc de exemplo:
fonte
Por que não um script simples do bash?
Substitua xeyes pelo programa de sua escolha.
fonte
Resposta curta : Não, você precisa fazer isso sozinho.
Resposta longa : você precisará de um processo pai para iniciá-lo e continue verificando se está ativo e reinicie-o, se necessário.
Você pode usar algo parecido
daemontools
para gerenciá-lo.fonte