URL: https://linuxfr.org/news/les-daemontools-ont-20-ans Title: Les daemontools ont 20 ans ! Authors: freem Ysabeau đŸ§¶, Bruno Ethvignot, palm123, olivierweb, Yves Bourguignon, volts, Anonyme, nud et vieille_moule Date: 2020ćčŽ11月15æ—„T17:39:06+01:00 License: CC By-SA Tags: debian Score: 47 Ce lundi 12 juillet 2021, nous fĂȘtions l’anniversaire des 20 ans de la 1re version stable des [[daemontools]], qui sont un mĂ©canisme de supervision (ou _watchdog_) des daemons, dĂ©corrĂ©lĂ© de l’init. ---- [Site officiel de daemontools](http://cr.yp.to/daemontools.html) ---- ------------------------------------------- La raison principale d’ĂȘtre des daemontools Ă©tait de relancer automatiquement les daemons Ă  sa charge lors d’un plantage. Pour cela, une mĂ©canique simple mais efficace est utilisĂ©e : * surveillance d’un dossier, par exemple /etc/service ; * pour chaque sous-dossier contenant un fichier `run`, lancement d’un watchdog qui sera chargĂ© d’exĂ©cuter `run` ; * si le sous-dossier contient Ă  nouveau un sous-dossier nommĂ© `log` qui contient un fichier `run`, la sortie d’erreur du fichier `run` principal est redirigĂ©e vers l’entrĂ©e standard du fichier `run` des logs. Ce mĂ©canisme n’implique en rien que les fichiers `run` soient des scripts Bourne (il suffit qu’ils soient exĂ©cutables), mais, en pratique, cela a probablement Ă©tĂ© la majoritĂ© des cas, pour des raisons de simplicitĂ©, et peut-ĂȘtre de portabilitĂ©, la simplicitĂ© des daemontools Ă©tant telle que ce fonctionnement est aisĂ© Ă  implĂ©menter sur tout systĂšme compatible POSIX. Contrairement aux scripts que l’on peut trouver notamment dans l’implĂ©mentation de rc.d par Debian (exemple pour apache2 : [rc.d](https://salsa.debian.org/apache-team/apache2/-/blob/master/debian/apache2.init) vs [runit](http://smarden.org/runit/runscripts.html#apache2)), ces scripts sont gĂ©nĂ©ralement triviaux et courts : moins de 10 lignes. Dans mon expĂ©rience (avec runit, un hĂ©ritier), le plus gros et le plus alambiquĂ© pĂšse 31 lignes, [udev nĂ©cessitant le lancement de commandes une fois le daemon fin prĂȘt](https://www.busybox.net/kill_it_with_fire.txt) afin de s’initialiser correctement. Outre le redĂ©marrage automatique des daemons, cet outil a apportĂ© d’autres fonctionnalitĂ©s bien utiles, notamment : * se dĂ©barrasser des fichiers de PID, qui traditionnellement permettent d’envoyer un signal Ă  un daemon prĂ©cis, mais qui en rĂ©alitĂ© impliquaient le risque de situation de compĂ©tition (race-condition) menant Ă  tuer un autre processus par erreur ; * possibilitĂ© de traiter les journaux par un outil autre que `syslogd`, et notamment, de façon isolĂ©e, avec la possibilitĂ© d’avoir un journal par daemon, ce qui permet par exemple une gestion plus fine des droits d’accĂšs aux journaux ainsi que d’éviter qu’un Ă©ventuel bug du logger n’impacte l’ensemble des journaux systĂšme. Bien sĂ»r, ce n’est pas exempt de dĂ©fauts (rien ne l’est) : * si un processus gĂšle, mais ne meurt pas, la situation ne sera pas dĂ©tectĂ©e automatiquement (il faudrait pour cela un watchdog actif, qui sonde rĂ©guliĂšrement la cible de maniĂšre non-intrusive pour Ă©viter tout biais) ; * il n’est pas possible de savoir si un daemon est en cours de lancement (dans le fichier `run` donc) ou effectivement dĂ©marrĂ© (le processus apache2 existe, par exemple) en consultant simplement la sortie de `svstat`. Cet outil, toujours disponible notamment sous Debian, a donnĂ© naissance Ă  divers [hĂ©ritiers](https://jdebp.eu/FGA/daemontools-family.html), qui, chacun, corrigent une ou plusieurs limitations, les plus connus Ă©tant peut-ĂȘtre [runit](https://en.m.wikipedia.org/wiki/Runit), [s6](https://skarnet.org/software/s6/) et [nosh](https://wiki.gentoo.org/wiki/Nosh). L’un d’eux, `runit` est notamment utilisĂ© par dĂ©faut par la distribution [void-linux](https://voidlinux.org) et empaquetĂ© (Ă  destination des utilisateurs avancĂ©s) pour d’autres distributions telles que [Artix Linux](https://artixlinux.org/) (dĂ©rivĂ©e de Archlinux pour supporter officiellement les autres systĂšmes d’init diffĂ©rents de [Systemd](https://fr.wikipedia.org/wiki/Systemd)) ou Debian (il s’agit d’une des trois options du paquet init, les autres Ă©tant sysvinit-core et systemd-sysv). Il est Ă©galement Ă  noter que des dĂ©veloppements ont lieu via Debian. Un autre, `nosh` est Ă©galement intĂ©ressant car capable d’importer les unit de systemd. Bien que, de nos jours, systemd soit chargĂ© de cette tĂąche sur la majoritĂ© des distributions Linux, je tenais Ă  faire cet hommage Ă  un outil qui, j’en suis sĂ»r, a permis a de nombreux sysadmin de mieux dormir la nuit, en tous cas, suffisamment pour que des gens maintiennent toujours des outils utilisant cette approche, 20 ans aprĂšs ! Joyeux anniversaire ! PS : les daemons apache2 et udev n’ont Ă©tĂ© utilisĂ©s que pour illustrer certains propos.

AltStyle ă«ă‚ˆăŁăŠć€‰æ›ă•ă‚ŒăŸăƒšăƒŒă‚ž (->ă‚ȘăƒȘă‚žăƒŠăƒ«) /