Daemontools in breve

Daemontools è un insieme di programmi di D.J. Bernstein che (tra le altre cose) permettono l'avvio, il monitoring e il logging di arbitrari servizi di sistema ed è tipicamente necessario per gestire i software realizzati da DJB (djbdns, qmail).
Presenta caratteristiche interessanti che lo rendono una alternativa ad altri metodi di avvio di servizi (Directory init.d, file inittab, file rc.local, console tty) ma si basa su una logica e una struttura del file system che fa "standard a se", al di fuori di quelli condivisi in diversi ambienti Unix.
Con daemontools il sistema, infatti, si popola di inedite directory:
/service contiene dei link simbolici che puntano a directory che definiscono le modalità con cui avviare un servizio. La semplice presenza del link in questa directory fa in modo che il servizio venga avviato (o riavviato, in caso di crash del programma) entro 5 secondi.
/command contiene link simbolici a comandi di sistema vari (di default quelli che fanno parte della suite daemontools)
/package contiene i pacchetti software installati.

Secondo DJB, i vantaggi di daemontools sono vari:
- Facilità di installazione e rimozione dei servizi (basta mettere o togliere un link simbolico nella directory)
- Facilità di avvio e gestione dei servizi: una volta inserito il link in /service, il servizo parte entro 5 secondi, se cade, viene riavviato
- Facilità di gestione dei segnali da dare ai servizi. Con il comando svc si può avviare, stoppare, terminare un servizio senza cercare il suo pid.
- Uniformità dell'ambiente in cui viene avviato un servizio: quando questo viene riavviato è in uno stato pulito, analogo a quello durante il boot
- Portabilità: la struttura in service funziona su ogni sistema Unix.

Gli svantaggi sono che nulla di tutto questo segue gli standard Unix ufficiali.

INSTALLAZIONE
Installare i Daemontools è semplice. Se si usa un pacchetto (tipicamente chiamato "daemontools") la procedura è quella tipica per la propria distribuzione (spesso il pacchetto va cercato fra repository non ufficiali, in quanto la sua logica introduce le anormalità sopra descritte nella coerenza di un sistema Linux).
La procedura manuale è ben descritta sul sito ufficiale:
ter:~# cd /tmp ; wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
--09:25:09--  http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
           => `daemontools-0.76.tar.gz'
[...]
ter:~# mkdir -p /package
ter:~# chmod 1755 /package
ter:~# cd /package
ter:/package# tar -zxvf /tmp/daemontools-0.76.tar.gz
ter:/package# cd admin/daemontools-0.76
ter:/package/admin/daemontools-0.76# package/install
Linking ./src/* into ./compile...
Compiling everything in ./compile...
[...]
Copying commands into ./command...
Creating symlink daemontools -> daemontools-0.76...
Making command links in /command...
Making compatibility links in /usr/local/bin...
Creating /service...
Adding svscanboot to inittab...
init should start svscan now.


Come si può intravedere, viene partire da init stesso il comando svscanboot, mediante la configurazione SV:123456:respawn:/command/svscanboot in /etc/inittab.
Questo mette la directory /command all'inizio della variabile PATH e lancia svscan /service, che si occupa di monitorare e avviare i servizi in /service, e readproctitle service errors che si occupa di gestire il logging.
Il risultato è la presenza, già al termine dell'installazione e ad ogni riavvio, dei seguenti servizi (che girano come root):
root      1047     1  0 10:46 ?        00:00:00 /bin/sh /command/svscanboot
root      1087  1047  0 10:46 ?        00:00:00 svscan /service
root      1088  1047  0 10:46 ?        00:00:00 readproctitle service errors: ........................................

I puntini indicano che va tutto bene, altrimenti vengono sostituiti da messaggi di errore.

COMANDI
Per ogni servizio da avviare, svcsan lancia il comando supervise nomeservizio che provvede ad eseguire lo script shell /service/nomeservizio/run dove va messo di fatto il comando che avvia il servizio desiderato.
Nella directory /service/nomeservizio viene creata una sottodirectory chiamata supervise dove sono scritte, in forma binaria, informazioni di stato sul servizio che possono essere interpretate con il comando svstat.
Per gestire i servizi si usa il comando svc:
svc -u nomeservizio avvia o riavvia il servizio /service/nomeservizio.
svc -d nomeservizio termina in modo pulito (SIGTERM) un servizio.
svc -p nomeservizio , svc -c nomeservizio mette in pausa (SIGSTOP) o continua (SIGCONT) un servizio.
svc -k nomeservizio termina brutalmente (SIGKILL) un servizio.

Altri comandi fra i daemontools:
Il comando multilog riceve in stdin una sequenza arbitraria di righe, le filtra eventualmente secondo criteri diversi, e lo salva su uno o più file di log, gestendo eventuali rotazioni.
fghack prova a gestire servizi che si mettono automaticamente in background (supervise li deve far girare in foreground).
envdir imposta le variabili d'ambiente secondo i file presenti nella directory indicata.
softlimit esegue un altro programma impostando limiti sull'utilizzo di risorse quali memoria e CPU utilizzata, file aperti ecc.

Privacy Policy