daemontools

5 gennaio 2026 by Roberto Puzzanghera 0 commenti

daemontools è una collezione di strumenti per gestire servizi UNIX. Monitora i servizi di qmail e salva i messaggi di errore in uno o più logs.

Changelog

  • Jan 5, 2026 (v0.83)
    This release doesn't add any new feature nor fixes any bug or issue. It just simplifies the installation by leaving the sources where the user wants them, installing the commands in the /command directory and creating a symbolic link in /usr/local/bin. From now on there's no daemontools directory in /var/qmail anymore.
  • Sep 30, 2025 (v0.82)
    - Fixed crash in multilog caused by invalid buffer access when read() returned -1 ea3abe9
  • Sep 8, 2025 (v. 0.81)
    - compiles with latest gcc 15.2
  • Aug 3, 2025
    - multilog prints a readable datetime in milliseconds if used with "m" flag (thanks squidvisa)
  • Mar 19, 2025 (v. 0.79)
    This version does not add new features nor corrects bugs. It's just a reorganizations of the files in the source dir
    - daemontools will be installed in /var/qmail/daemontools
    - Moved 'package' and 'src' to the top dir
    - Version grabbed from 'VERSION' in package/upgrade
  • Feb 9, 2025 (v0.78.4)
    - several adjustments to get clang version 18.1.6 compatibility
    - restored !/bin/sh in all scripts
  • Oct 14, 2024 (version 0.78.3)
    - all package/ scripts now run the bash shell
    - package/run script will recognize if we are in an lxc container to skip inittab configuration
    - package/run.rclocal will find both /etc/rc.local /etc/rc.d/rc.local
    - daemontools-0.78.2 directory renamed to daemontools
  • Oct 9, 2024
    - added -ltr to conf-ld to restore compatibility with systems with glibc prior to v. 2.17 like RHEL6/CentOS6, where the librt.so library is not linked
  • Oct 10, 2024
    - version 0.78.1: added package/compile which was missing again! (tx Bai Borko)
  • Sep 6, 2024
    - fixed a .gitignore issue which was preventing the package/compile script upload (thanks Ivelin Topalov)
  • Jul 29, 2024 (version 0.78)
    - multilog prints a readable datetime if used with "d" flag, it prints timestamps if used in the usual way with the "t" flag (80f2133)
    - fixed several compilation warnings and/or breaks on gcc-14.1
  • Dec 9, 2023
    -moved my patched daemontools to github and called 0.77 the new version
    -clear service moved to qmail/supervise/clear

Il programma multilog con data e ora in formato leggibile

Il programma multilog è stato modificato per poter emettere sia timestamps che ora e data in formato intelligibile (commit).

L'azione t inserisce un @, un preciso timestamp, e uno spazio prima di ogni riga, usando lo stesso formato di tai64n.

Esempio:

multilog t '-*' '+* fatal: *' ./main

stampa la riga

@400000003b4a39c23294b13c fatal: out of memory

L'azione d inserisce la data e l'ora (fino ai nanosecondi) e uno spazio prima di ogni riga.

Esempio:

multilog d '-*' '+* fatal: *' ./main

stampa la riga

2024-07-29 10:36:08.811661123 fatal: out of memory

L'azione m inserisce la data e l'ora (fino ai millisecondi) e uno spazio prima di ogni riga.

Esempio:

multilog m '-*' '+* fatal: *' ./main

stampa la riga

2024-07-29 10:36:08.811 fatal: out of memory

Tutte le azioni devono essere essere inserite come primo argomento di multilog.

Altre patch applicate

La versione di daemontools che andremo a installare contiene anche le seguenti altre patch al programma originale di DJB:

Installazione

Innanzitutto creiamo  la cartella che ospiterà qmail, daemontools e ucspi-tcp:

mkdir /var/qmail

Installare daemontools:

DAEMONTOOLS_VER=0.83

wget https://github.com/sagredo-dev/daemontools/archive/refs/tags/v${DAEMONTOOLS_VER}.tar.gz
tar xzf v${DAEMONTOOLS_VER}.tar.gz
cd daemontools-${DAEMONTOOLS_VER}
chown -R root:root .
package/install

Dunque abbiamo i comandi di daemontools in  /commands e di questi abbiamo dei link simbolici dalla directory /usr/local/bin.

Se si riscontra il seguente errore nel linkare la libreria librt.so (io l'ho riscontrato su OpenBSD 7.6)

ld: error: unable to find library -ltr

è necessario cancellare la stringa "-ltr" dalla prima riga del file src/conf-ld come segue:

cc -s

Configurare il servizio clear

Aggiungere ora il servizio "clear", che è utile quando si deve pulire la riga  readproctitle service errors. Lo configureremo in seguito.

Lanciare daemontools all'avvio

Il modo in cui i servizi in capo a daemontools vengono avviati al boot dipende dal proprio sistema operativo. Se il proprio OS gestisce l'avvio della macchina tramite il file /etc/inittab, il comando /command/svscanboot è stato inserito nel file /etc/inittab al momento dell'installazione di daemontools. Ciò sarà sufficiente a lanciare qmail all'avvio della macchina

Se invece si ha a che fare con un sistema operativo basato su systemd, il comando di cui sopra potrà essere aggiunto a rc.local, supponendo che lo stesso rc.local sia eseguito all'avvio.

In alternativa a questo si può scegliere di creare un servizio specifico daemontools.service come segue:

cat > /etc/systemd/system/daemontools.service << __EOF__
[Unit]
Description=Daemontools service supervision
ConditionPathExists=/command/svscanboot

[Service]
ExecStart=/command/svscanboot
Restart=always

[Install]
WantedBy=multi-user.target
__EOF__

systemctl enable daemontools.service
systemctl start  daemontools.service

Si tenga presente che in questo modo non si potrà usare qmailctl, ma per avviare/stoppare qmail si dovrà usare systemd:

systemdctl start/stop daemontools

Se infatti si provasse ad avviare qmail attraverso qmailctl, mentre daemontools è attivo come servizio di systemd, si avranno due daemontools che gestiscono contemporaneamente qmail con uno dei due che causa il seguente errore nella riga readproctitle service error:

135277 ? S 0:00 \_ readproctitle service errors: ...fatal: unable to acquire vusaged/supervise/lock: temporary failure supervise: fatal: unable to acquire qmail-submission/supervise/lock: temporary failure supervise: fatal: unable to acquire vusaged/supervise/lock: temporary failure supervise: fatal: unable to acquire qmail-submission/supervise/lock: temporary failure supervise: fatal: unable to acquire vusaged/supervise/lock: temporary failure

Questa guida farà sempre riferimento a qmailctl in tutti gli esempi dove qmail deve essere avviato o arrestato.

Aggiungi un commento

qmail notes

Pay me a coffee:

PayPal - The safer, easier way to pay online.

LXC scripts
Other contents
Guide per gli utenti
Ultimi commenti
Vedi anche...
Articoli recenti

RSS feeds