Top Daemontools Alternatives for Robust UNIX Process Supervision in 2024


10 views

While Daemontools (djbtools) pioneered UNIX process supervision with its minimalist design, modern sysadmins often seek alternatives that better integrate with contemporary init systems. The principal pain points include:

  • Non-standard timestamp format (TAI64N) complicating log parsing
  • Service directory structure diverging from /etc/init.d conventions
  • Incompatibility with legacy control scripts (e.g., apachectl, nginx)

1. systemd (Built-in for Most Distros)

RedHat/CentOS and Ubuntu (since 15.04) include systemd by default. Example service unit:

[Unit]
Description=Node.js App
After=network.target

[Service]
Type=simple
User=nodeuser
WorkingDirectory=/opt/app
ExecStart=/usr/bin/node server.js
Restart=always

[Install]
WantedBy=multi-user.target

2. Runit (DJB-style Alternative)

Maintains DJB philosophy while offering better compatibility:

#!/bin/sh
exec 2>&1
exec /usr/sbin/nginx -g "daemon off;"

Place in /etc/sv/nginx/run then symlink to /etc/service

3. Supervisor (Python-based)

Excellent for heterogeneous environments:

[program:celery]
command=/opt/venv/bin/celery -A proj worker -l INFO
directory=/opt/proj
user=www-data
autostart=true
autorestart=true
stderr_logfile=/var/log/celery.err.log
stdout_logfile=/var/log/celery.out.log

When transitioning from Daemontools:

  • Process Tree Management: Newer tools handle child processes more gracefully
  • Log Rotation: Built-in support in alternatives (vs. multilog)
  • Cluster Awareness: Some modern supervisors offer distributed coordination
Tool Init Compat Log Rotation Hot Reload
systemd Excellent journald Yes
Runit Good Requires svlogd Partial
Supervisor Fair Built-in Full

While Daemontools (djbtools) remains a robust process supervisor, many sysadmins seek alternatives due to:

  • Non-standard TAI64N timestamp format complicating log integration
  • Non-traditional service directory structure (/service vs /etc/init.d)
  • Incompatibility with conventional init scripts like apachectl

1. Systemd (Built-in for RHEL/Debian)

The most direct replacement, using native unit files:

[Unit]
Description=My Service
After=network.target

[Service]
ExecStart=/usr/local/bin/my_daemon
Restart=always
User=daemon

[Install]
WantedBy=multi-user.target

2. Runit (Daemontools-inspired)

Better compatibility with traditional init systems:

#!/bin/sh
exec 2>&1
exec /usr/sbin/my_service -f config.cfg

Store in /etc/sv/my-service/run and symlink to /service

3. Supervisor (Python-based)

Excellent for heterogeneous environments:

[program:myapp]
command=/usr/bin/python /opt/myapp/main.py
user=www-data
autostart=true
autorestart=unexpected
stderr_logfile=/var/log/myapp.err.log

When transitioning from Daemontools:

  • Process Trees: New supervisors may handle child processes differently
  • Log Rotation: Built-in solutions may replace multilog
  • Startup Order: Modern systems often include dependency management

For containerized environments, consider:

  • Docker's --restart policies
  • Kubernetes liveness probes
  • Tini as minimal init process

Example Kubernetes liveness probe:

livenessProbe:
  exec:
    command:
    - /healthcheck
  initialDelaySeconds: 30
  periodSeconds: 10