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.