Como posso reiniciar automaticamente um processo depois que ele termina?

10

Eu tenho um programa golang que eu quero reiniciar depois que ele terminar em uma caixa do Debian Squeeze. A coisa está servindo HTTP por trás de uma configuração do mod_proxy do Apache 2. Não espero que o processo falhe, mas gostaria de ter algum seguro contra ele.

No Ubuntu, eu teria usado o upstart para manter o processo ativo. O Debian não gosta do Upstart pelo que entendi, pois é um substituto do init.

Existe uma alternativa que reinicia um ou mais processos após o término que funciona no Squeeze e joga bem com o init?

    
por Deleted 06.08.2011 / 11:45

5 respostas

10

A melhor maneira de fazer isso é o daemontools . Eles permitem monitorar e reaparecer processos.

Consulte a documentação em seu website: link

    
por 06.08.2011 / 11:55
10

supervisionar é uma alternativa leve e eficiente. Debian é empacotado em daemontools . Você também pode ler esta pergunta relacionada , que lista alguns supervisionar criticas, e menciona restartd como outra possibilidade.

Por fim, se você quiser algo incrivelmente fácil de configurar, obtive grande sucesso com monit . Também é empacotado no Debian .

    
por 06.08.2011 / 11:57
2

supervisionar ou monitorar são bons para manter um único processo ativo. Já que você pede para manter "um ou mais" processos vivos, eu gostaria de ligar supervisord . É certamente um exagero para o gerenciamento de um único processo, mas se você precisar controlar vários processos, pode ser uma coisa sua.

    
por 06.08.2011 / 13:09
2

Uma opção é usar /etc/inittab em vez de colocar seu script em /etc/init.d/ .

Você simplesmente adiciona uma entrada no seguinte formato:

<jobname>:<runlevels>:respawn:<command>

Infelizmente, isso significa que você não pode usar os comandos init de início / parada / reinicialização normais, mas deve garantir que seu script esteja em execução o tempo todo.

    
por 26.02.2013 / 04:15
2

A maneira de distribuição cruzada do processo de manipulação é reiniciada com o cron e um script simples. Você pode ver um writeup aqui Como manter um trabalho em execução no Linux

O script parece com algo como

#!/bin/bash 
# make-run.sh 
# make sure a process is always running.  
# Add the following to the crontab (i.e. crontab -e)
# */5 * * * * /home/path_to_make_run/make-run.sh

process=servermonitoringhq 
makerun="/home/path_to_the_job_you_want_running/runjob.sh"  

if pgrep $process > /dev/null         
then                 
  exit         
else         
  $makerun &         
fi 
    
por 25.10.2011 / 17:11