2012-05-18 13 views
5

Come dovrei scrivere daemontools superviser?Come supervisionare un webserver con daemontools?

Ho iniziato a utilizzare i daemontools di D. J. Bernsteins per mantenere in esecuzione alcuni processi e funziona correttamente. Ma ora ho bisogno di monitorare un paio di condizioni aggiuntive su quei processi e non ho trovato buone informazioni su come farlo.

Il mio scenario è che ho alcuni processi in esecuzione per un'applicazione web (macchine virtuali pharo smalltalk) e rispondono a http, ognuno nella loro porta (che è per il loadbalance). Vorrei in qualche modo eseguire il ping di questi per verificare che non solo sono in esecuzione ma rispondono alle richieste http. Se non rispondono in un certo modo a una richiesta per più di 30 secondi, dovrebbero essere trattati come bloccati e semplicemente riavviati.

Questo è possibile anche con daemontools? se sì, come dovrei scrivere questo script e dove dovrei inserirlo? o dov'è la documentazione su questo?

risposta

6

La soluzione più semplice consiste nel creare un altro task daemontool con uno script che dorme per 30 secondi e quindi verifica la presenza del servizio (utilizzando wget o arricciatura ad esempio). Se il servizio non risponde tempestivamente, è possibile riavviare il servizio (svc -t yourapp) e/o inviare una notifica. Il-script eseguire del nuovo servizio potrebbe sembrare semplice come questo:

#!/bin/sh 
sleep 30 
if ! wget --quiet --timeout=5 --delete-after "http://yourapp.com/" ; then 
    svc -t /etc/service/yourapp 
fi 

ho anche fatto una buona esperienza con strumenti come Munin. Ancora una volta è necessario fornire uno script che fornisca informazioni sullo stato della propria immagine. Se imposti le tue immagini con un servizio REST, puoi anche fornire metriche davvero interessanti come sessioni attive, sessioni inattive, parametri gc, consumo di memoria, statistiche del database, ... Lo strumento quindi disegna grafici piacevoli nel tempo e ti consente di specificare i limiti per ricevere una notifica quando le cose si comportano male.

+0

Grazie. ma non c'è modo di farlo nel supervisore stesso? – pauel

+0

Sì, guarda il primo paragrafo della mia risposta. –

+0

sì, l'ho capito. è solo che pensavo che il supervisore che esegue il demone potesse farlo in qualsiasi modo. Comunque la tua soluzione mi aiuta molto. Molte grazie – pauel

3

per rilevare se il servizio è reattivo, è possibile usare curl (una misura perfetta per HTTP e della riga di comando/script della shell)

curl --connect-timeout 10 http://8.8.8.8 
curl: (28) connect() timed out! 

e si può scrivere cose più sofisticate, come il controllo che la risposta è 200 (OK) ecc.