- Info: http://cr.yp.to/daemontools.html
- github
- Autore: D.J. Bernstein
- Versione: 0.79
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
- Version 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
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 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
Entrambe 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:
errno
patch- La patch
multilog_filesize_limit
(grazie a Sam Tang), che consente di estendere il limite delle dimensioni del log file fino a 100MB (per default è 16MB).
Installazione
Innanzitutto creiamo la cartella che ospiterà qmail, daemontools e ucspi-tcp:
mkdir /var/qmail
Installare daemontools
:
DAEMONTOOLS_VER=0.79 cd /var/qmail 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 daemontools
in /var/qmail/daemontools.
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:
mkdir -p /var/qmail/supervise/clear touch /var/qmail/supervise/clear/down cat > /var/qmail/supervise/clear/run << __EOF__ #!/bin/sh yes '' | head -4000 | tr '\n' . __EOF__ chmod +x /var/qmail/supervise/clear/run
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.