2011-12-31 18:37:32
DJB daemontools with upstart or systemd
The daemontools softwaresuite are widely used for supervising processes. Unlike the common way of launching daemons or other processes in background, writing their PID to a file and watch for a process (actually any process) with this PID by crappy tools like monit the daemontools offer a direct supervision of processes with an immediate restart on a crash.
Using the traditional SysV-init it is most easy to launch the daemontools processes:
$ grep -B1 SV /etc/inittab si::sysinit:/etc/rc.d/rc.sysinit SV:12345:respawn:/command/svscanboot3
Note: svscanboot3 is a binary replacement of svscanboot. It is part of ngtx.
SysV-init process ID 1 is very small, approx. 700 KB RSS. With many manual optimizations it is possible to start a system / server as fast as with upstart or systemd.
Upstart offers event-based booting. A time ago it was dealed as a successor to SysV-init. To start daemontools as a upstart-service you must create a config file:
$ cat /etc/init/daemontools.conf description "DJB daemontools" start on filesystem stop on runlevel [06] respawn exec /command/svscanboot3
Some latest Linux (actual "linux-only") distros switch to systemd. Systemd also offers event-based and parallel booting with linux-only features like cgroups or fanotify. Its features are very nice but its PID 1 RSS is 13 MB which is very big compared to SysV-init. For systemd you must also create a config file (and a symlink):
$ ls -l /etc/systemd/system/multi-user.target.wants/ \ daemontools.service lrwxrwxrwx. 1 root root 39 21. Dez 08:34 /etc/systemd/system/multi-user.target.wants/ \ daemontools.service -> /lib/systemd/system/ \ daemontools.service $ ls -l /lib/systemd/system/daemontools.service -rw-r--r--. 1 root root 151 21. Dez 08:33 /lib/systemd/system/daemontools.service $ cat /lib/systemd/system/daemontools.service [Unit] Description=DJB daemontools After=sysinit.target [Service] ExecStart=/command/svscanboot3 Restart=always [Install] WantedBy=multi-user.target