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?
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.
#!/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
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.
Réponses:
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.
la source
J'ai déjà répondu à une question similaire .
Dans ton cas:
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.la source
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.
la source
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:
la source
Pourquoi pas un simple script bash?
Remplacez xeyes par le programme de votre choix.
la source
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
daemontools
pour le gérer.la source