20.6. Squid e Daemontools

Squid è un software decisamente stabile, a memoria non si ricordano problematiche gravi relative a crash in produzione direttamente dipendenti il demone. Storicamente lo si è visto "morire" esclusivamente per problematiche legate all'hardware o a configurazioni sbagliate. Naturalmente la prudenza non è mai troppa, specialmente se utilizziamo Squid in scenari mission-critical.

Per migliorare l'affidabilità e la raggiungibilità del servizio di Squid ci viene incontro il pacchetto di software scritto dall'integerrimo DJ Bernstein, ovvero Daemontools, che possiamo facilmente reperire su: http://cr.yp.to/daemontools/daemontools-0.76.tar.gz

Il funzionamento di questo supporto è semplice, con la sua struttura daemontools fa partire in modalità "respawn" direttamente dall'inittab l'applicativo svscanboot il quale lancia e controlla continuamente il programma svscan sulla directory /service dopodichè supervise avrà il compito di controllare il processo che abbiamo deciso di monitorare e lo rilancerà nel caso in cui questo dovesse interrompersi per un qualsiasi motivo.

Passiamo ora alla configurazione: dopo aver installato Squid con un determinato prefix (Es. /usr/squid) ed aver correttamente reso funzionante daemontools, andiamo a creare lo script run necessario per il corretto funzionamento della struttura di controllo

#!/bin/sh
exec ./bin/squid -d 1 -N -D \
-f ./etc/squid.conf \
2>&1 | /usr/local/bin/multilog t s10000000000 n20 ./log 
  

idealmente, ovvero come dice lo stesso DjB, questa tipologia di file non dovrebbe contenere dei "|" (pipe) al loro interno, ma dato che non abbiamo bisogno diretto del log, questo può anche andare. C'è da puntualizzare anche che all'interno del file, possono essere messe e tolte tutte le opzioni ad eccezione di "-N", per un corretto funzionamento infatti, Squid non deve entrare in daemon mode. Una volta terminato questo step, basterà dare i seguenti comandi

% chmod 755 /usr/squid/run 
% ln -s /usr/squid /service 
  

aspettiamo qualche secondo e, come per magia, Squid partirà da solo, correttamente funzionante, e sarà virtualmente invulnerabile! naturalmente possiamo controllare se Squid funziona con il comando

% svstat /service/squid 
  

altra cosa importante, non servirà inserire nessuno script di boot nell'init.d in quanto penserà svscanboot stesso a farlo partire. Se proprio lo volessimo, eccone uno fatto ad hoc su schema RedHat

#!/bin/sh 
# Start/stop/restart squid-daemontools. 
# Start acpid: 
squid_start() { 
 if [ -x /usr/squid/bin/squid ]; then 
  echo "Starting Squid daemon: /usr/squid/bin/squid"
  /usr/local/bin/svc -u /service/squid
 fi
} 
#
# Stop squid:
squid_stop() {
 echo "Shutting down Squid daemon: /usr/squid/bin/squid"
 /usr/local/bin/svc -dk /service/squid
 /bin/killall squid # non necessario di solito, server per uccidere anche i child 
}
#
# Restart acpid: 
squid_restart() { 
 /usr/local/bin/svc -dk /service/squid
 /bin/killall squid
 /usr/local/bin/svc -u /service/squid
} 
case "$1" in 
'start') squid_start 
 if [ -x /usr/squid/bin/squid ]; then 
  echo "Starting Squid daemon: /usr/squid/bin/squid" 
  /usr/local/bin/svc -u /service/squid24
 fi 
}
#
# Stop Squid: 
squid_stop() {
 echo "Shutting down Squid daemon: /usr/squid/bin/squid" 
 /usr/local/bin/svc -dk /service/squid24
 /bin/killall squid 
}
#
# Restart Squid:
squid_restart() {
 squid_stop
 sleep 1
 squid_start
}
#
case "$1" in
'start')
squid_start
;;
'stop')
squid_stop
;;
'restart')
squid_restart
;;
*)
echo "usage $0 start|stop|restart"
esac