monitore ou assista a um processo e reinicie se ele ficar inativo [fechado]

2

Eu tenho um programa de trabalho que inicio em rc.local. O programa não é o mais estável do mundo, então eu gostaria de configurar um watcher de algum tipo que verifique se o programa mencionado está avançando e se não, inicie o programa novamente.

Posso imaginar algumas maneiras de fazer isso, embora tenha certeza de que há mais:

  1. tem uma tarefa cron que é executada e procura pelo programa em execução. Se lá, ele pára, caso contrário, dispara outra instância do programa
  2. execute um programa de monitoramento dedicado que seja executado o tempo todo e sondar com frequência para ver se o programa está sendo executado.

Algum de vocês tem exemplos de qualquer uma dessas implementações ou recomendações sobre como devo fazer isso?

    
por JD Long 19.05.2011 / 22:00

2 respostas

5

Eu sugeriria Monit . Você pode instalá-lo a partir do Synaptic ou do sudo apt-get install monit. Eu uso no meu servidor para monitorar meu SSH, Apache, etc e reiniciá-los se eles falharem.

    
por Josh 19.05.2011 / 22:29
1

Você pode usar um script auxiliar que executa o processo em um loop infinito, por exemplo:

#!/bin/bash

# Infinite loop
while true; do

    # Get starting time
    start_epoch=$(date +%s)

    # Run program
    my-program

    # Abort if the application exited too quickly
    duration=$(( $(date +%s) - $start_epoch ))
    if [[ "$duration" < 30 ]]; then
        echo "Program exited too quickly. Aborting relauncher."
        exit
    fi

done

exit

Chame esse script em vez de my-program em /etc/rc.local .

Para um exemplo mais complexo, veja este script que eu uso para reiniciar automaticamente o Applet NetworkManager.

    
por ændrük 19.05.2011 / 22:33