Alternativa a Daemontools (djbtools) per supervisionare i processi unix?


26

Ho usato Daemontools per fornire un modo semplice e affidabile per supervisionare i servizi Unix sui miei server. Funziona bene, ma richiede un diverso modo di pensare ( The DJB Way ) e alcune lamentele comuni sono:

  • Timestamp basati su TAI64N
  • Non memorizza gli script in /etc/init.d (o (/usr/local)/etc/rc.d)
  • Non funziona sempre con script come apachectl. Alcuni script devono essere riscritti.

Ricordo che alcuni demoni simili di "supervisore / cane da guardia" erano in lavorazione circa due anni fa, ma alcuni erano ancora un po 'agitati attorno ai bordi.

Se sei passato da Daemontools a qualcos'altro, cosa hai scelto e ha funzionato bene per te? RedHat o Ubuntu sono dotati di utilità di supervisore di processo per impostazione predefinita?

Risposte:


16

Hrm, se si sta utilizzando Ubuntu, il loro nuovo processo init, upstart , include un livello di supervisione di processo. Può essere utilizzato per l'avvio e l'arresto standard dei servizi, come script SysV init, e può anche monitorare le applicazioni in esecuzione e rigenerarle se muoiono.

Puoi anche implementare il riavvio del processo di un uomo povero tramite inittab, a seconda delle tue esigenze.

Se stai principalmente cercando qualcosa da tenere d'occhio su un processo, per assicurarti che sia sempre in esecuzione e quindi riavvialo quando non lo è, ho avuto molta fortuna con restartd . Sfortunatamente, l'unica fonte di ciò che conosco è il pacchetto Debian. Tuttavia, è un'applicazione molto piccola e semplice, praticamente solo un singolo file .c e .h, con un file make. Compilarlo dal tarball dei sorgenti Debian su Red Hat è banale (nel mio precedente lavoro ne ho persino realizzato un RPM).

Un'ultima opzione di cui ho sentito parlare, ma non utilizzata, è Supervisore . Sembra uno strumento promettente, ma riavvio ha funzionato abbastanza bene per me in passato, per quello di cui avevo bisogno, che non mi sono ancora preso la briga di giocarci.


12

+1 per runit. Più funzionalità e flessibilità rispetto ai daemontools, compatibile con gli argomenti e le opzioni esistenti di daemontools. Piuttosto pulito.

Ma come hai detto, molti strumenti vengono forniti con i propri binari di controllo, apache2ctl, ejabberdctl, poundctl, collectd, ecc. E sebbene esistano degli hack, a volte è meglio attenersi agli strumenti forniti, soprattutto quando non si è sicuri del più pulito possibile implementazione. Di solito faccio un compromesso e la maggior parte dei servizi viene eseguita sotto la supervisione di runit. E gli altri possono essere autorizzati a correre usando il modo banale.


1
+1 Vale la pena ricordare che il runsvcomando di runitsupporta i controlli personalizzati, in modo che un riavvio possa essere implementato in termini di binari di controllo nativi di un demone.
Pilcrow,

4

Bene, c'è runit . Non posso dirvi quali sono le sue differenze e somiglianze con i demonoli, ma a giudicare dal sito web di Berstein, direi che c'è una chiara influenza di Bernstein.


2
Il mio voto è per runit, dato che puoi rilasciarlo in un accordo SysVInit e farlo assumere /etc/init.d/ <scriptname> in modo abbastanza trasparente.
Avery Payne,


4

In alternativa al già citato daemonizee daemontools, c'è il comando daemon del pacchetto libslack.

daemon è abbastanza configurabile e si preoccupa di tutte le noiose cose del demone come il riavvio automatico, la registrazione o la gestione dei file pid.



3

C'è anche lo strumento demone di libslack che è scritto in C e disponibile per varie piattaforme (Unix).

È abbastanza configurabile e si preoccupa di tutte le noiose cose del demone come il riavvio automatico, la registrazione o la gestione dei file pid.


2

Ubuntu viene fornito con Upstart - non ne so molto ma so che ha capacità di "supervisore". Il lancio di Apple è un'altra opzione (l'articolo di Wikipedia ha una bella sezione "vedi anche" che elenca anche molti altri, tra cui Upstart e RunIt).

Tutti hanno i loro punti positivi e il loro marchio speciale di übersuck - Ogni volta che qualcuno mi chiede dei programmi "supervisore di processo" / "cane da guardia", faccio sempre la stessa domanda: perché ne hai bisogno?


-2

Non ci sono strumenti popolari / di consenso della comunità per questo perché tutti coloro che percorrono questa strada si rendono conto che è un vicolo cieco. Se i tuoi processi di lunga durata falliscono troppo spesso perché il monitoraggio semplice sia abbastanza buono, smetti di usarli e sposta il codice all'interno di qualcosa che sarà più guidato dagli eventi.

modifica: come Chris sottolinea di seguito a volte sei completamente messo alle strette, nel qual caso un cron job * / 1 che cerca il processo / pidfile, esegue un avvio / riavvio se mancante e restituisce i risultati in un'e-mail al responsabile sviluppatore / product manager è la posizione di fallback.


3
Più facile a dirsi che a farsi. ;-) A volte hai applicazioni che sei costretto a eseguire, indipendentemente da quanto instabili o scadenti possano essere, e tutto ciò che puoi fare per mantenerle in esecuzione ti aiuterà a ridurre le telefonate alle 3 del mattino. Non è l'ideale, in ogni caso, ma a volte è bello come si arriva.
Christopher Cashell,

1
Questa risposta perde due caratteristiche dei supervisori del processore: la capacità di gestire gruppi di processi come una singola unità e la capacità di gestire le dipendenze. Ad esempio, il tuo sito Web può coinvolgere un server Web, un server di database e diverse applicazioni Web in esecuzione come processi esterni. Questi processi possono avere dipendenze, ad esempio il database deve essere attivo prima dell'applicazione web. Un buon supervisore di processo ti consentirà di avviare e arrestare questo gruppo di processi con un singolo comando e si assicurerà che le cose si avviino nell'ordine corretto.
Larks

1
In un mondo ideale, tutto funzionerebbe perfettamente. Purtroppo questo non è semplicemente un mondo ideale.
Matt,

Il problema non sta fallendo troppo spesso. Il problema fallisce una volta alla settimana e non viene riavviato immediatamente . Questa non è una vera risposta.
dan3

@ChristopherCashell è sulla buona strada. La supervisione all'interno di un'app è di solito troppo ingegneristica (e capita anche che non sia filosofia UNIX.) Il software può essere considerato sempre imperfetto, indipendentemente da quanto impegno proattivo viene versato per correggere ogni incidente. La supervisione è un livello esterno distinto ... una polizza assicurativa. È meglio mantenere attivi i servizi di produzione, anche se "non dovrebbero andare in crash", perché la realtà è che succede. Preferirei un riavvio del servizio, registrare l'eccezione e risolverlo al mattino. (Il flapping di servizio è un altro caso da considerare.)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.