Se ele é iniciado a partir do init, você pode recuperá-lo pelo init. Defina a ação para o processo "reaparecer" para os níveis de execução nos quais você quer o processo.
Estou procurando uma maneira de monitorar um processo e relançar o executável se o processo morrer por qualquer motivo. O Linux tem uma ferramenta interna que pode fazer isso?
Respondi a uma pergunta semelhante antes .
No seu caso:
#!/bin/bash
while ! <<command>>
do
sleep 1
echo "Restarting program..."
done
Substitua <<command>>
pelo comando que você deseja executar. O processo deve terminar com o código de saída zero para quebrar o loop. Caso contrário, é reiniciado pelo script.
Você só quer reiniciá-lo se ele morrer? O problema com isso é que ele não lida com situações em que ele congela. Portanto, apenas verificar o processo nem sempre ajuda. Então, se isso é algo como um servidor web, você quer ter um script verificando-o da perspectiva do usuário.
Se você configurar o Nagios Monitoring, poderá usar manipuladores de eventos . Estes são apenas scripts que você escreve que serão executados quando o serviço estiver inativo, assim você pode ter um que reinicie algo como o Apache se o site estiver inoperante.
Dependendo da distro, mas usamos com sucesso "monit" para essa tarefa. É bem fácil. Você pode escrever suas próprias verificações, monitorar o processo PID, etc.
Exemplo de arquivo monitrc:
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
Por que não um script simples?
#!/usr/bin/bash
while 'true'
do
xeyes
done
Substitua xeyes por um programa de sua escolha.
Resposta curta : Não, você tem que fazer isso sozinho.
Long Answer : você precisará de um processo pai para iniciá-lo e, depois, verificar se está ativo e reiniciá-lo, se necessário.
Você pode usar algo como daemontools
para gerenciá-lo.