Alternative aux Daemontools (djbtools) pour superviser les processus Unix?

26

J'ai utilisé Daemontools pour fournir un moyen simple et fiable de superviser les services Unix sur mes serveurs. Cela fonctionne bien, mais cela nécessite une façon de penser différente ( The DJB Way ) et certaines plaintes courantes sont:

  • Horodatages basés sur TAI64N
  • Ne stocke pas les scripts sous /etc/init.d (ou (/usr/local)/etc/rc.d)
  • Ne fonctionne pas toujours avec des scripts comme apachectl. Certains scripts doivent être réécrits.

Je me souviens que des démons similaires "superviseur / chien de garde" étaient en préparation il y a environ deux ans, mais certains étaient encore un peu rudes sur les bords.

Si vous êtes passé de Daemontools à autre chose, qu'avez-vous choisi et est-ce que cela a bien fonctionné pour vous? RedHat ou Ubuntu sont-ils fournis avec des utilitaires de supervision de processus par défaut?

Stefan Lasiewski
la source

Réponses:

16

Hrm, si vous utilisez Ubuntu, leur nouveau processus init, upstart , comprend un niveau de supervision des processus. Il peut être utilisé pour votre démarrage et arrêt standard de services, les scripts d'initialisation à la SysV, et il peut également surveiller les applications en cours d'exécution et les réapparaître si elles meurent.

Vous pouvez également implémenter le redémarrage du processus d'un pauvre via inittab, en fonction de vos besoins.

Si vous recherchez principalement quelque chose pour garder un œil sur un processus, pour vous assurer qu'il est toujours en cours d'exécution, puis le redémarrer lorsqu'il ne l'est pas, j'ai eu beaucoup de chance avec restartd . Malheureusement, la seule source à ma connaissance est le paquet Debian. Cependant, il s'agit d'une application très petite et simple, essentiellement un seul fichier .c et .h, avec un fichier make. Le compiler à partir de l'archive tar source Debian sur Red Hat est trivial (j'en ai même fait un RPM lors de mon travail précédent).

Une dernière option dont j'ai entendu parler, mais que je n'ai pas utilisée, est Superviseur . Cela ressemble à un outil prometteur, mais restartd a assez bien fonctionné pour moi dans le passé, pour ce dont j'avais besoin, que je n'ai pas encore pris la peine de jouer avec.

Christopher Cashell
la source
12

+1 pour runit. Plus de fonctionnalités et flexible que daemontools, compatible avec les arguments et options daemontools existants. Génial.

Mais comme vous l'avez mentionné, de nombreux outils sont livrés avec leurs propres fichiers binaires de contrôle, apache2ctl, ejabberdctl, poundctl, collectd, etc. mise en œuvre possible. En général, je fais un compromis et la plupart des services sont exécutés sous la supervision de runit. Et les autres peuvent être autorisés à s'exécuter de manière triviale.

alcy
la source
1
+1 Il convient de mentionner que la runsvcommande de runitprend en charge les contrôles personnalisés, afin qu'un redémarrage puisse être implémenté en termes de binaires de contrôle natif d'un démon.
pilcrow
4

Eh bien, il y a runit . Je ne peux pas vous dire quelles sont ses différences et similitudes avec daemontools, mais à en juger par le site Web de Berstein-esque, je dirais qu'il y a une influence certaine de Bernstein.

Steven Monday
la source
2
Mon vote est pour runit, étant donné que vous pouvez le déposer dans un arrangement SysVInit et le faire prendre en charge /etc/init.d/ <scriptname> de manière assez transparente.
Avery Payne
4

Comme alternative au déjà mentionné daemonizeet daemontools, il y a la commande daemon du paquet libslack.

daemon est assez configurable et se soucie de toutes les tâches fastidieuses du démon telles que le redémarrage automatique, la journalisation ou la gestion des fichiers pid.

nazu
la source
3

Il existe également l' outil démon de libslack qui est écrit en C et disponible pour diverses plates-formes (Unix).

Il est assez configurable et prend en charge toutes les tâches fastidieuses du démon telles que le redémarrage automatique, la journalisation ou la gestion du fichier pid.

tchad
la source
2

Ubuntu est livré avec Upstart - je ne sais pas grand-chose mais je sais qu'il a des capacités de "superviseur". Launchd d'Apple est une autre option (cet article de Wikipédia a une belle section "voir aussi" qui répertorie un tas d'autres aussi, y compris Upstart et RunIt).

Tous ont leurs bons points et leur propre marque spéciale de übersuck - Chaque fois que quelqu'un me pose des questions sur les programmes "superviseur de processus" / "chien de garde", je pose toujours la même question: pourquoi en avez-vous besoin?

voretaq7
la source
-2

Il n'y a pas d'outils populaires / de consensus communautaire pour cela, car tous ceux qui s'engagent dans cette voie se rendent compte que c'est une impasse. Si vos processus de longue durée échouent trop souvent pour qu'une surveillance simple soit suffisante, arrêtez de les utiliser et déplacez votre code dans quelque chose qui sera davantage piloté par les événements.

modifier: comme le souligne Chris ci-dessous, vous êtes parfois complètement coincé, auquel cas un travail cron * / 1 qui recherche le processus / fichier pid, exécute un démarrage / redémarrage s'il est manquant et envoie les résultats dans un e-mail au responsable développeur / chef de produit est votre position de repli.

cagenut
la source
3
Plus facile à dire qu'à faire. ;-) Parfois, vous avez des applications que vous êtes obligé d'exécuter, indépendamment de leur instabilité ou de leur merde, et tout ce que vous pouvez faire pour les faire fonctionner contribuera à réduire les appels téléphoniques à 3 heures du matin. Pas idéal, en aucun cas, mais parfois c'est aussi bon que possible.
Christopher Cashell du
1
Cette réponse passe à côté de deux caractéristiques des superviseurs de processeur: la capacité de gérer des groupes de processus comme une seule unité et la capacité de gérer les dépendances. Par exemple, votre site Web peut impliquer un serveur Web, un serveur de base de données et plusieurs applications Web exécutées en tant que processus externes. Ces processus peuvent avoir des dépendances - par exemple, la base de données doit être active avant l'application Web. Un bon superviseur de processus vous permettra de démarrer et d'arrêter ce groupe de processus avec une seule commande, et s'assurera que les choses démarrent dans le bon ordre.
larsks
1
Dans un monde idéal, tout fonctionnerait parfaitement. Malheureusement, ce n'est tout simplement pas un monde idéal.
Matt
Le problème n'échoue pas trop souvent. Le problème échoue une fois par semaine et n'est pas redémarré immédiatement . Ce n'est pas une vraie réponse.
dan3
@ChristopherCashell est sur la bonne voie. La supervision à l' intérieur d' une application est généralement une ingénierie excessive (et il se trouve que ce n'est pas la philosophie UNIX.) Le logiciel peut être supposé toujours imparfait, quel que soit l'effort proactif déployé pour corriger chaque plantage. La supervision est une couche externe distincte ... une police d'assurance. Il est préférable de maintenir les services de production en cours, même s'ils ne sont "pas censés tomber en panne", car la réalité est que sh% t se produit. Je préfère un redémarrage du service, enregistrez l'exception et corrigez-la le matin. (Le service flapping est un autre cas à considérer.)