Domanda

Come dovrei creare script per il supervisore di daemontools?

Ho iniziato a usare D.J.I daemontools di Bernstein per mantenere alcuni processi in esecuzione e funzionano bene.Ora però devo monitorare un paio di condizioni aggiuntive su tali processi e non sono riuscito a trovare informazioni valide su come farlo.

Il mio scenario è che ho alcuni processi in esecuzione per un'app Web (macchine virtuali Pharo Smalltalk) e rispondono http, ciascuno nella propria porta (che è per il bilanciamento del carico).Vorrei in qualche modo eseguire il ping per verificare che non solo siano in esecuzione ma rispondano alle richieste http.Se non rispondono in un certo modo ad 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 posizionarlo?o dov'è la documentazione a riguardo?

È stato utile?

Soluzione

La soluzione più semplice è creare un'altra attività daemontool con uno script che dorme per 30 secondi e quindi verifica la presenza del servizio (utilizzando wget o curl ad esempio).Se il servizio non risponde tempestivamente, è possibile riavviare il servizio (svc -t yourapp) e/o inviare una notifica.Lo script di esecuzione del nuovo servizio potrebbe apparire 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.Anche in questo caso è necessario fornire uno script che fornisca informazioni sullo stato della tua 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 interessanti nel tempo e ti consente di specificare i limiti per ricevere una notifica quando le cose si comportano male.

Altri suggerimenti

Per rilevare se il servizio è reattivo, puoi utilizzare curl (perfetto per HTTP e script da riga di comando/shell)

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

e puoi scrivere cose più sofisticate, come controllare che la risposta sia 200 (OK) ecc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top