daemontools

19 marzo 2025 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

  • 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

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 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:

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.

Aggiungi un commento

Ultimi commenti
Vedi anche...
Articoli recenti

RSS feeds