Como relançar um executável se ele morrer

7

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?

    
por pufferfish 27.08.2009 / 12:47

6 respostas

7

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.

    
por 27.08.2009 / 13:00
7

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.

    
por 27.08.2009 / 16:56
4

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.

    
por 27.08.2009 / 13:13
3

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 27.08.2009 / 19:31
2

Por que não um script simples?

#!/usr/bin/bash
while 'true'
do
  xeyes
done

Substitua xeyes por um programa de sua escolha.

    
por 27.08.2009 / 16:16
0

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.

    
por 27.08.2009 / 12:49

Tags