Assicurarsi che un processo sia sempre in esecuzione


23

Ho iniziato a ospitare siti qualche tempo fa usando Cherokee. Per fonti esterne (FastCGI, ecc.) Ha un'opzione per avviare il processo se non riesce a trovarne uno in esecuzione sul socket o sulla porta designati. Questo è fantastico perché significa che se PHP o un sito Django cadono (come fanno occasionalmente) lo riavvia automaticamente.

Su un nuovo server che utilizza PHP-FPM non ho potuto usare Cherokee (ha un bug con PHP) quindi mi sono trasferito su NGINX. Mi piace molto NGINX (per il suo stile di configurazione) ma sto avendo seri problemi con i processi che cadono e non si rigenerano mai. PHP lo fa a volte ma i siti Django sono più un problema. Ho creato degli script init per loro e vengono visualizzati all'avvio, ma questo non mi aiuta se si disconnettono tra i riavvii.

Immagino che sto cercando un proxy FastCGI. Qualcosa che, come Cherokee, sa quali processi dovrebbero essere in esecuzione su quali socket / porte e li respinge su richiesta. Esiste una cosa del genere? C'è un modo per incorporarlo in NGINX (per facilità di configurazione)?

Risposte:


13

Che ne dici di daontoontools e in particolare dello strumento di supervisione

supervisionare monitora un servizio. Avvia il servizio e riavvia il servizio se muore. La configurazione di un nuovo servizio è semplice: tutte le esigenze di supervisione sono una directory con uno script di esecuzione che esegue il servizio.


+1 per i demoniol. Tuttavia, spesso non puoi semplicemente lanciare una sceneggiatura simile /etc/init.d/apachectl. Spesso è necessario riscrivere il proprio semplice script di avvio da utilizzare exec. Anche se mi piacerebbe vedere altri esempi usando i daemontools
Stefan Lasiewski,

daemontools ha un'altra incarnazione come runit. Non è così importante ora che i daemontools siano di dominio pubblico, ma una vecchia distribuzione potrebbe avere solo runit.
Camh,


5

Seguo il daemontoolssuggerimento, ma se non ti piace il modo in cui funziona il software di DJB (per qualsiasi motivo), c'è anche supervisord.

Ho creato un'immagine di FreeBSD qualche tempo fa che supervisordgestivo nginxe gunicorn, che ho usato per ospitare alcune semplici app WSGI, e l'intero processo è stato piuttosto semplice.

Se lo stai facendo per Django, Gunicorn rende davvero semplice la distribuzione di app Django, tra l'altro. Vedi questo post sul blog per maggiori dettagli.


4

Un'altra opzione potrebbe essere quella di utilizzare Monit , che è quello che generalmente utilizzo.


3

Hai preso in considerazione god?

God è un framework di monitoraggio facile da configurare, facile da estendere scritto in Ruby.

Mantenere in esecuzione i processi e le attività del server dovrebbe essere una parte semplice del processo di distribuzione. Dio vuole essere l'applicazione di monitoraggio più semplice e potente disponibile.

Lo uso per assicurarmi che se le istanze di Rails / nginx cadono, si rianimino, e anche se non vedo il supporto integrato per verificare se sta usando la porta giusta o meno, ma se il problema è che il processo fallisce o non funziona più, non puoi sbagliare god.



0

Una soluzione hacker sarebbe quella di lanciare periodicamente uno script (via cron) che rilevi se il processo non è attivo e in questo caso lo riavvia.


0

Esistono vari modi per riavviare un demone fallito, la consueta raccomandazione è "respawn in inittab" ma con una certa considerazione di un limite se la macchina è davvero avvitata.

Il demone watchdog può anche monitorare un processo tramite il suo file PID. Tuttavia, ciò dovrebbe essere considerato solo come una linea di difesa secondaria per riavviare una macchina che è troppo malata per funzionare correttamente (ad es. Memoria insufficiente, bombardamenti, ecc.) E non come via principale o per monitorare e riavviare un demone.

Infine, puoi prendere in considerazione il monitoraggio di sistemi complessi utilizzando i nagios per fornire agli amministratori una visione globale. Può eseguire plug-in per sondare il funzionamento del demone esternamente, che è un test più completo del suo funzionamento rispetto al semplice PID attivo.


-1

Risposta semplice: inizia, scrivi il tuo pid da qualche parte e ogni volta x (secondi, minuti, la tua scommessa) controlla se il processo è attivo.

Risposta lunga: tutto quanto sopra è un buon metodo. Ma un po 'complicato.

Tieni inoltre presente che essere vivi e rispondere alle richieste sono cose diverse.


1
... e incrocia le dita e spera che nulla scarabocchi sul file PID, o lo cancelli o lo riutilizzi per un demone diverso o lo punti di nuovo su qualche altro processo innocente e non correlato che non reagirà bene al controllo per essere sveglio. ☺ Questo è il motivo per cui la lunga risposta di un supervisore demone adeguato che esegue demoni come processi figlio e li monitora con i soliti meccanismi di sistema Unix / Linux è il modo migliore per lungo tempo accettato.
JdeBP,
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.