11 votes

Comment puis-je redémarrer automatiquement un processus après son arrêt ?

J'ai un programme golang que je veux redémarrer après qu'il se soit terminé sur une boîte Debian Squeeze. La chose sert HTTP derrière une configuration Apache 2 mod_proxy. Je ne m'attends pas à ce que le processus échoue, mais j'aimerais avoir une certaine assurance contre cela.

Sur Ubuntu, j'aurais utilisé upstart pour maintenir le processus en vie. D'après ce que j'ai compris, Debian n'aime pas Upstart car c'est un remplacement d'init.

Existe-t-il une alternative qui redémarre un ou plusieurs processus après leur arrêt, qui fonctionne sur Squeeze et qui soit compatible avec init ?

10voto

mailq Points 16792

Les meilleurs moyens d'y parvenir sont les daemontools . Ils vous permettent de surveiller et de relancer les processus.

Consultez la documentation sur leur site web : http://cr.yp.to/daemontools.html

10voto

superviser est une alternative légère et efficace. Sous debian, elle est empaquetée dans daemontools . Vous pouvez également lire ceci Question connexe qui énumère certaines critiques supervisées, et qui mentionne redémarrerd comme une autre possibilité.

Enfin, si vous voulez quelque chose d'incroyablement facile à installer, j'ai eu beaucoup de succès avec monitrice . Il est également emballé dans Debian .

2voto

Bittrance Points 2900

Supervise ou monit sont bons pour garder un seul processus en vie. Puisque vous demandez de garder "un ou plusieurs" processus en vie, j'aimerais brancher supervisord . Il s'agit certainement d'une solution excessive pour la gestion d'un seul processus, mais si vous devez assurer le suivi de plusieurs processus, elle peut vous convenir.

2voto

Ian Varley Points 5623

La façon dont la distribution croisée gère les redémarrages de processus est avec cron et un simple script. Vous pouvez voir un compte-rendu ici Comment maintenir un travail en cours sous Linux

Le script ressemble à ceci

#!/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

2voto

Alex Points 121

Une option consiste à utiliser /etc/inittab au lieu de mettre votre script en /etc/init.d/ .

Il suffit d'ajouter une entrée au format suivant :

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

Malheureusement, cela signifie que vous ne pouvez pas utiliser les commandes init normales de démarrage/arrêt/redémarrage, mais cela devrait garantir que votre script s'exécute tout le temps.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X