Comment relancer un exécutable s'il meurt

8

Je cherche un moyen de surveiller un processus et de relancer l'exécutable si le processus meurt pour une raison quelconque. Linux a-t-il un outil intégré qui peut le faire?

poisson-globe
la source
il y a d'autres réponses et pointeurs dans cette question serverfault.com/questions/56526/…
jrg

Réponses:

7

S'il est lancé depuis init, vous pouvez le faire réapparaître par init. Définissez l'action du processus sur «respawn» pour les niveaux d'exécution auxquels vous souhaitez que le processus se déroule.

Cian
la source
De même, launchd est plutôt sympa.
Jeremy L
Toujours. Les outils démon sont également plutôt cool pour ce genre de choses, mais échouent au test `` intégré '', sans le vouloir.
Cian
10

J'ai déjà répondu à une question similaire .

Dans ton cas:

#!/bin/bash
while ! <<command>>
do
  sleep 1
  echo "Restarting program..."
done

Remplacez <<command>>par la commande que vous souhaitez exécuter. Le processus doit se terminer avec le code de sortie zéro afin de rompre la boucle. Sinon, il est redémarré par le script.

Juliano
la source
Agréable. Cela fonctionne également avec ksh, et je changerais "echo" en une commande "logger" pour mettre le message dans les journaux système.
Mei
Réponse parfaite bro.keep up it up.
Arunjith RS
4

Voulez-vous le redémarrer uniquement s'il meurt? Le problème est qu'il ne gère pas les situations où il se fige. Donc, vérifier simplement le processus n'aidera pas toujours. Donc, si cela ressemble à un serveur Web, vous voulez qu'un script le vérifie du point de vue de l'utilisateur.

Si vous configurez Nagios Monitoring, vous pouvez alors utiliser des gestionnaires d'événements . Ce ne sont que des scripts que vous écrivez qui s'exécuteront lorsque le service sera arrêté, vous pouvez donc en avoir un qui redémarre quelque chose comme Apache si le site Web est en panne.

Kyle Brandt
la source
+1, assurez-vous de couvrir également les situations où il est intentionnellement tué.
Maximus Minimus
Bon point, bien que dans mon cas, le processus disparaisse simplement
pufferfish
3

Selon la distribution, mais nous avons utilisé avec succès "monit" pour cette tâche. C'est assez simple. Vous pouvez rédiger vos propres chèques, surveiller le processus PID, etc.

Exemple de fichier monitrc:

check process sshd with pidfile /var/run/sshd.pid
   start program  "/etc/init.d/ssh start"
   stop program  "/etc/init.d/ssh stop"
   if failed port 22 protocol ssh then restart
   if 5 restarts within 5 cycles then timeout
Ramon Poca
la source
2

Pourquoi pas un simple script bash?

#!/usr/bin/bash
while `true`
do
  xeyes
done

Remplacez xeyes par le programme de votre choix.

djhowell
la source
0

Réponse courte : Non, vous devez le faire vous-même.

Réponse longue : vous aurez besoin d'un processus parent pour le démarrer, puis continuez à vérifier qu'il est vivant et redémarrez-le si nécessaire.

Vous pouvez utiliser quelque chose comme daemontoolspour le gérer.

Rory
la source
Réponse courte: vous vous trompez. Réponse longue: si une distribution Linux n'a pas inittab, elle aura /etc/event.d/ - l'un ou l'autre mécanisme redémarrera un processus quand il mourra.
Paul Tomblin