GNU/Linux >> Tutoriels Linux >  >> Linux

Un moyen simple de redémarrer les processus en panne ?

Solution 1 :

Je regarderais dans daemontools (http://cr.yp.to/daemontools.html).

Supervise a été conçu exactement dans ce but :démarrer des processus et les surveiller, en les redémarrant immédiatement s'ils se terminent.

Vous pouvez toujours utiliser monit si vous avez besoin de faire quelque chose de plus compliqué qu'une simple vérification "est-ce qu'il est toujours en cours d'exécution", et si le processus doit être redémarré, faites-le via la supervision.

Solution 2 :

Vous pouvez également utiliser /etc/inittab pour redémarrer les processus morts en utilisant le respawn action.

Voir la section inittab sur http://aplawrence.com/Unixart/startup.html

Solution 3 :

Vous pouvez utiliser des scripts de gestionnaire d'événements avec Nagios si vous l'avez en place pour redémarrer les services.

Si le vernis nécessite une autorisation root pour démarrer (les scripts init.d le font généralement), remplacez "/etc/init.d/varnish start" par "sudo /etc/init.d/varnish start". Mais cela ne suffira probablement pas, car vous ne voulez probablement pas donner à l'utilisateur monit qui s'exécute en tant que privilèges sudo nopasswd totaux pour toutes les commandes et donner sudo à un script shell serait fondamentalement tout aussi mauvais. Vous devrez donc déterminer quelles commandes de ce script init ont besoin de sudo, donner à ces commandes les privilèges sudo dans le fichier /etc/sudoers à l'utilisateur monit, et enfin modifier ce script init en conséquence. Ou peut-être qu'au lieu de tout ce vernis peut être exécuté en tant qu'utilisateur non root ?

Enfin, je suis sûr que vous le savez, mais je vais le dire quand même. Vous mettez clairement beaucoup d'efforts là-dedans, j'espère que vous mettez autant d'efforts à comprendre pourquoi le vernis plante et à le réparer (ou à traquer les développeurs pour comprendre pourquoi) :-)

Mise à jour:
Ce n'est peut-être pas aussi propre, mais un moyen simple de le faire en tant que root pourrait être de configurer un script qui vérifie si le processus est correct, et sinon le démarre. Ensuite, exécutez simplement ce script toutes les deux minutes en tant que tâche cron.

Solution 4 :

Une autre excellente méthode tirée de StackOverflow :

until myserver; do
    echo "Server 'myserver' crashed with exit code $?.  Respawning.." >&2
    sleep 1
done

Cela pourrait être ajouté à la crontab :

crontab -e

Ajoutez ensuite une règle pour démarrer votre script de surveillance :

@reboot /usr/local/bin/myservermonitor

Ou ajouté en tant que script dans /etc/init.d

Voir la réponse StackOverflow pour une explication détaillée de la raison pour laquelle il s'agit d'une bonne approche.


Linux
  1. Meilleur moyen de s'assurer qu'un script est exécuté une fois par période ?

  2. Processus dans une session dans un shell interactif Vs dans un script ?

  3. Le script Node.js n'a pas pu démarrer avec systemctl

  4. Existe-t-il un moyen de démarrer vim en mode lecture seule

  5. Script de démarrage systemd postgresql

Un moyen simple de lister les liens symboliques sous Linux

Un moyen simple d'ouvrir un port dans Ubuntu 21.10

Un moyen simple de vérifier la version des pilotes NVIDIA sous Linux

Une manière simple de comprendre la commande IOStat

Existe-t-il un moyen d'afficher la notification du script bash dans Ubuntu ?

Quel est le moyen le plus rapide d'exécuter un script ?