2016-09-21 2 views
1

Existe-t-il un paramètre dans systemd pour redémarrer un service automatiquement après, par exemple, 24 heures?systemd: redémarre automatiquement le service après 24 heures?

Ou quelle est la meilleure solution pour implémenter une telle fonction? Contexte: J'ai un défaut difficile à identifier dans mon code de collecte de données Web et de stockage dans DB. Cela fonctionne pendant 10 ou 20 jours, puis il s'arrête brusquement, jusqu'à ce que nous le réinitialisions manuellement. Même une journalisation excessive ne m'a pas encore donné d'idée d'où vient exactement le problème. Bien sûr, je préférerais résoudre le problème sous-jacent, mais (pour des raisons économiques) un kill-and-restart par force brute ferait probablement aussi l'affaire.


EDIT: Il me semble avoir enfin trouvé la faille réelle - une requête Internet pour laquelle je ne l'ai pas (ne pouvait) définir un délai d'attente (car la fonction read_json n'a pas permis à cette option). Je l'ai maintenant résolu via socket.setdefaulttimeout (...) - et j'espère que cela résoudra ce problème d'arrêt occasionnel lui-même. Merci pour votre aide!

Répondre

0

Systemd a une fonction de surveillance intégrée, voir ce link pour plus d'informations.

Cependant, vous devrez patcher votre logiciel pour envoyer des événements sd_notify, afin que le chien de garde sache que votre logiciel est toujours actif.

De 1:

Tout d'abord, pour faire des logiciels chien de garde-supervisable il doit être patché d'envoyer « Je suis vivant » des signaux à intervalles réguliers dans sa boucle d'événements . Corriger ceci est relativement facile. Premièrement, un démon doit lire la variable d'environnement WATCHDOG_USEC =. Si elle est définie, contiendra l'intervalle de surveillance dans usec formaté en tant que chaîne de caractères ASCII, lors de sa configuration pour le service. Le démon doit ensuite émettre des appels sd_notify ("WATCHDOG = 1") chaque moitié de cet intervalle. Un daemon patché de cette manière devrait supporter de façon transparente la fonctionnalité de surveillance en vérifiant si la variable d'environnement est définie et en respectant la valeur à laquelle elle est définie.

Une approche encore plus rapide et sale serait de mettre en place un cron-emploiqui tue le processus toutes les 24 heures et redémarre votre service.

+0

Wow c'est vraiment génial. Merci un million. "chien de garde", fantastique. Je vais l'utiliser _next time_ ... parce que je semble avoir finalement trouvé la vraie faille - une requête internet pour laquelle je ne pouvais pas définir de délai, car la fonction read_json n'autorisait pas cette option. Je l'ai maintenant résolu via socket.setdefaulttimeout (...) - et j'espère que cela résoudra ce problème d'arrêt occasionnel lui-même. Mais merci merci pour votre aide! – AltSheets

0

Je suppose que votre exigence est la même que dans cette question suivante. question on periodic restart of service file

J'espère que cela répond à votre question.

+0

Merci un million. "WatchdogSec" = oui c'est encore plus facile que de notifier régulièrement le chien de garde "Je suis toujours en vie". J'utiliserai ce _temps prochain_ ... parce que je semble avoir finalement trouvé la vraie faille - une requête Internet pour laquelle je ne pouvais pas définir de délai, car la fonction read_json n'autorisait pas cette option.Je l'ai maintenant résolu via socket.setdefaulttimeout (...) - et j'espère que cela résoudra ce problème d'arrêt occasionnel lui-même. Mais merci merci pour votre aide! – AltSheets