J'ai besoin de surveiller plusieurs processus en cours d'exécution sur mon serveur Web. Pour une raison quelconque, le vernis se bloque actuellement une fois par jour ou deux. J'utilise monit pour soi-disant redémarrer le vernis automatiquement, mais cela ne fonctionne pas. Voici mon entrée monit.conf pour Varnish.
check process varnish with pidfile /var/run/varnish.pid
start program = "/etc/init.d/varnish start" with timeout 60 seconds
stop program = "/etc/init.d/varnish stop"
if failed host <my server ip> port 80 protocol http
and request "/blank.html" then restart
if 3 restarts within 5 cycles then timeout
group server
Le fichier journal montre qu'après l'arrêt du vernis, les tentatives de redémarrage échouent ensuite. Finalement, monit cesse de surveiller le vernis.
Quelqu'un a des suggestions pour résoudre ce problème? Ou mieux encore, pouvez-vous suggérer d'autres moyens simples de surveiller et de redémarrer automatiquement les processus en panne? Merci!
Réponses:
Je regarderais dans daemontools ( http://cr.yp.to/daemontools.html ).
Supervise a été conçu dans ce but précis - pour démarrer les processus et les surveiller, en les redémarrant immédiatement s'ils se terminent.
Vous pouvez toujours utiliser monit si vous devez faire quelque chose de plus compliqué qu'une simple vérification "est-il toujours en cours", et si le processus doit être redémarré, faites-le via superviser.
la source
Vous pouvez également utiliser / etc / inittab pour redémarrer les processus morts en utilisant l' action de réapparition .
Voir la section inittab sur http://aplawrence.com/Unixart/startup.html
la source
Vous pouvez utiliser des scripts de gestionnaire d'événements avec Nagios si vous en avez pour redémarrer les services.
Si le vernis nécessite l'autorisation root pour démarrer (les scripts init.d le font généralement), changez "/etc/init.d/varnish start" en "sudo /etc/init.d/varnish start". Mais cela ne sera probablement pas suffisant car vous ne voudrez probablement pas donner à tout utilisateur les privilèges de sudo nopasswd à 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, attribuer ces 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 cela, le 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 y mettez clairement beaucoup d'efforts, j'espère que vous faites autant d'efforts pour comprendre pourquoi le vernis se bloque et le réparer (ou pourchasser les développeurs pour comprendre pourquoi) :-)
Mise à jour:
cela peut ne pas être aussi propre, mais un moyen facile de le faire en tant que root peut ê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.
la source
Une autre excellente méthode tirée de StackOverflow :
Cela pourrait être ajouté à la crontab:
Ajoutez ensuite une règle pour démarrer votre script de moniteur:
Ou ajouté comme script dans
/etc/init.d
Voir la réponse StackOverflow pour une explication détaillée des raisons pour lesquelles il s'agit d'une bonne approche.
la source
Je cherchais également le moyen le plus simple de gérer ce problème. Le moyen le plus simple que j'ai pu trouver est d'ajouter simplement
Restart=allways
au.service
fichier concerné en/etc/systemd/system/multi-user.target.wants/
tant que dernière ligne de la[service]
balise.Après cela ne
sudo systemctl daemon-reload
suiviesudo systemctl restart service.service
pour recharger les modifications.Vous pouvez tester en vérifiant si le service est en cours d'exécution
systemctl status processname
:, vérifiez l'horodatage de démarrage. Après celaps -ef | grep servicename
, annulez le processus avec l'identifiant que vous venez de trouverkill 1234
. après cela,systemctl status processname
recommencez et vérifiez si l'horodatage de démarrage est mis à jour.Il devrait fonctionner sur:
la source