Je veux que Upstart fasse deux choses:
- arrêtez d'essayer de réapparaître si vite un processus qui a échoué
- n'abandonnez jamais d'essayer de réapparaître
Dans un monde idéal, un parvenu tenterait de redémarrer un processus mort après 1 seconde, puis doublerait ce délai à chaque tentative, jusqu'à ce qu'il atteigne une heure.
Est-ce que quelque chose comme ça est possible?
never give up trying to respawn
reste sans réponse. n'importe qui?Réponses:
Le livre de recettes Upstart recommande un délai post-arrêt ( http://upstart.ubuntu.com/cookbook/#delay-respawn-of-a-job ). Utilisez la
respawn
strophe sans arguments et elle continuera d'essayer indéfiniment:(J'ai obtenu cela de cette question Ask Ubuntu )
Pour ajouter la partie retard exponentiel, j'essaierais de travailler avec une variable d'environnement dans le script post-stop, je pense que quelque chose comme:
** MODIFIER **
Pour appliquer le retard uniquement lors de la réapparition, en évitant le retard lors d'un arrêt réel, utilisez ce qui suit, qui vérifie si l'objectif actuel est "stop" ou non:
la source
post-start
à le remettre à 1.Comme déjà mentionné, utilisez
respawn
pour déclencher la réapparition.Cependant, la couverture Upstart Cookbook sur
respawn-limit
indique que vous devrez spécifierrespawn limit unlimited
d'avoir un comportement de relance continu.Par défaut, il réessayera tant que le processus ne réapparaîtra pas plus de 10 fois en 5 secondes.
Je suggère donc:
la source
J'ai fini par mettre
start
un cronjob. Si le service est en cours d'exécution, il n'a aucun effet. S'il ne fonctionne pas, il démarre le service.la source
J'ai amélioré la réponse de Roger. En règle générale, vous souhaitez interrompre en cas de problème dans le logiciel sous-jacent, ce qui provoque un plantage important en peu de temps, mais une fois le système récupéré, vous souhaitez réinitialiser le délai d'interruption. Dans la version de Roger, le service dormira toujours pendant 60 secondes, même pour les plantages isolés et isolés après 7 plantages.
la source
Vous voulez
respawn limit <times> <period>
- bien que cela ne fournisse pas le comportement exponentiel que vous recherchez, cela le ferait probablement pour la plupart des cas d'utilisation. Vous pouvez essayer d'utiliser des valeurs très grandes pourtimes
etperiod
pour approximer ce que vous essayez de réaliser. Voir la section de man 5 init surrespawn limit
pour référence.la source
respawn limit 10 3600
les 10 essais, ils seraient probablement épuisés immédiatement - car par défaut il n'y a pas de retard.D'autres ont répondu à la question pour les strophes de réapparition et de limite de réapparition, mais je voudrais ajouter ma propre solution pour le script post-stop qui contrôle le délai entre les redémarrages.
Le plus gros problème avec la solution proposée par Roger Dueck est que le retard provoque le blocage du redémarrage de JobName jusqu'à ce que la mise en veille soit terminée.
Mon ajout vérifie s'il y a un redémarrage en cours avant de déterminer s'il faut ou non dormir.
la source