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?


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.


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.


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.


+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

2

Pourquoi pas un simple script bash?

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

Remplacez xeyes par le programme de votre choix.


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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.