Como posso reiniciar automaticamente um processo depois que ele termina?


11

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

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

Existe uma alternativa que reinicie um ou mais processos depois que eles terminam, que funciona no Squeeze e funciona bem com o init?


Você poderia reformular sua pergunta? Você deseja reiniciar um processo depois que ele foi finalizado?
mailq

Eu gostaria de reiniciar um processo automaticamente se ele falhar ou terminar automaticamente.
Excluído

2
O programa init tradicional faz exatamente isso. Por que as pessoas pensaram que seria uma boa ideia usar o init para executar um script de shell que invoque um script de shell que inicie outro processo que faça a mesma coisa, mas sem um pânico e reinicialização automáticos do kernel, caso esse processo falhe, está completamente além de mim.
Simon Richter # 03

Esse é um argumento justo. Vou investigar apenas usando init também. Estou empacotando o software usando o dpkg, portanto, a criação de scripts init não deve ser uma dificuldade.
Excluído

Respostas:


10

O melhor caminho a seguir é o daemontools. Eles permitem monitorar e reaparecer processos.

Consulte a documentação em seu site: http://cr.yp.to/daemontools.html


1
Obrigado - é exatamente isso que estou procurando. DJB = bom como regra. Na verdade, eu deveria ter lembrado que existia o fato de passar 5 anos cuidando do qmail!
Excluído

O mesmo comigo, exceto que eu costumava cuidar dos djbdns por algum tempo.
Mr.B

10

supervisionar é uma alternativa leve e eficiente. No debian, ele é empacotado em daemontools . Você também pode ler esta pergunta relacionada , que lista algumas críticas de supervisão e menciona restartd como outra possibilidade.

Finalmente, se você deseja algo incrivelmente fácil de configurar, tive grande sucesso com o monit . Também é empacotado no Debian .


2
daemontools é incrível; monit é um pesadelo de "por que diabos você não começa?!?" frustração.
Womble

2

supervisionar ou monitorar são bons para manter vivo um único processo. Como você solicita manter "um ou mais" processos ativos, eu gostaria de conectar a supervisord . Certamente é um exagero gerenciar um único processo, mas se você precisar acompanhar vários processos, pode ser sua opção.


2

Uma opção é usar em /etc/inittabvez de inserir o script /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 normais de iniciar / parar / reiniciar o init, mas deve garantir que seu script esteja sendo executado o tempo todo.


2

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

O script parece 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 
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.