parvenu et supervord est-il utilisé pour la même chose?

13

J'ai quelques processus basés sur jvm dont je dois m'assurer de démarrer chaque fois que mon serveur est redémarré, et également s'il s'arrête en raison d'une erreur inattendue, etc.

J'utilise Ubuntu 12.04 au cas où.

J'ai vu des exemples de scripts upstart et je penche en quelque sorte de cette façon, mais je veux comprendre quelles sont les différences avec quelque chose comme upstart ou supervisord.

Sont-ils utilisés exactement aux mêmes fins ou il existe des différences de fonctionnalités?

Blankman
la source

Réponses:

12

La différence est que upstart est un remplaçant init alors que supervisord est un Process Control System. Cette explication est donnée sur le site de supervisord :

Il partage certains des mêmes objectifs de programmes tels que launchd, daemontools et runit. Contrairement à certains de ces programmes, il n'est pas destiné à être exécuté comme substitut d'init en tant que «identifiant de processus 1». Au lieu de cela, il est destiné à être utilisé pour contrôler les processus liés à un projet ou à un client, et doit démarrer comme tout autre programme au démarrage.

Cela signifie que supervord lui-même serait démarré par upstart, soit via un fichier de tâche upstart, soit un script d'initialisation sysV. Personnellement, j'ai choisi d'utiliser un gestionnaire de processus plutôt qu'un simple démarrage à partir des raisons suivantes:

  1. Le service ne démonifie pas correctement
  2. Le service est connu pour mourir et doit être surveillé et redémarré

Un exemple de programme qui ne démonifie pas correctement est quand il ne ferme pas stdout et stderr et continue d'écrire des données à ces emplacements. Supervisord peut gérer la journalisation de cette sortie.

jordanm
la source
Je vois, je ne suis pas sûr de bien comprendre, mais je pensais que upstart peut également redémarrer le processus s'il échoue.
Blankman
@Blankman Je suppose qu'il y a encore moins de raisons avec les systèmes d'init modernes
jordanm
Je noterais que la solution appropriée à un service qui ne démonifie pas correctement serait de corriger le bogue avec ledit service qui l'empêche de démonifier correctement. J'accorde que quelque chose comme supervisord serait utile pour # 2, cependant.
Shadur
1
@shadur Je ne suis pas d'accord pour dire que c'est la meilleure solution. Le processus ne vous appartient peut-être pas, vous ne pouvez donc pas le corriger. Même si vous pouvez le corriger, quel que soit le nombre de bugs que vous corrigez, vous ne pouvez jamais savoir qu'il n'y a plus de cachette, et des années plus tard, votre processus mourra à nouveau, en production, en raison d'une situation qui n'a jamais été exposée. avant, comme une condition de réseau ou de base de données inhabituelle. Préféreriez-vous que votre site reste hors ligne, frustrant les utilisateurs et vous coûtant de l'argent? Non. Vous avez besoin d'un outil pour redémarrer les services. Période.
Jonathan Hartley