A melhor maneira de fazer isso é o daemontools
. Eles permitem monitorar e reaparecer processos.
Consulte a documentação em seu website: link
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?
A melhor maneira de fazer isso é o daemontools
. Eles permitem monitorar e reaparecer processos.
Consulte a documentação em seu website: link
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 .
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.
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.
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
Tags debian init.d debian-squeeze