2012-01-31 20 views
15

Ciao qualcuno può dirmi come gestire il software watchdog in linux. Ho un programma "SampleApplication" che gira continuamente e ho bisogno di riavviarlo se si blocca o si chiude in modo imprevisto.come utilizzare watchdog del software linux

Ero google su questo e ho trovato Linux ha watchdog su/dev/watchdog ma non so come usarlo. Qualcuno potrebbe aiutarmi con l'esempio.

La mia domanda è dove specificare il nome dell'applicazione e l'intervallo di ritardo per riavviare. Siccome sono nuovo a linux, ti prego di informarmi se possibile con un campione. Grazie

+1

Per quanto ne so, ciò garantisce che l'intero sistema non si blocchi e resetta se lo è.Non penso che tu possa usarlo solo per mantenere viva l'applicazione di un utente. – Janne

+0

Ho esperienza di uno strumento in un'applicazione Linux incorporata che fa solo quello che chiedi, sfortunatamente non riesco a ricordare il suo nome altrimenti avrei posto una risposta, ma so che funziona più o meno come hai suggerito in in ogni caso, quindi non è affatto una cattiva idea. Un'altra opzione è quella di utilizzare una porta specifica sull'indirizzo localhost 27.0.0.1 e inviare processi ad esso e il demone watchdog del software lo monitora./dev/watchdog è per il watchdog hardware, il tuo daemon potrebbe mantenerlo, così che alla fine, se il daemon si ferma, il sistema si ripristina (come ultima risorsa). – Clifford

risposta

12

La maggior parte dei programmi Unix/Linux init gestirà i demoni per te e li riavvierà. Cerca di mettere il tuo servizio in /etc/inittab. Oppure potresti utilizzare Upstart o systemd.

Tutti questi programmi funzionano come PID 1 ed è il loro lavoro per monitorare e riavviare i processi di sistema.

Dal tag Busybox presumo che si stia utilizzando un sistema incorporato. Su quelli, gli script di init in stile System V con tutti i loro script di shell sono davvero esagerati. Probabilmente dovresti strappare tutto questo e sostituirlo con voci in /etc/inittab o processi upstart o systemd.

+0

Ciao @Zan grazie per i tuoi input, ho aggiunto ":: respawn:/path/app" allo /etc/inittab e l'app eseguita correttamente dopo il riavvio del dispositivo, l'unico problema è che questa voce è temporanea e viene rimossa automaticamente al riavvio del dispositivo. C'è un modo per rendere permanente la procedura di inizializzazione. –

+1

@ITion: non dovrebbe essere temporaneo. Devi usare un 'initrd' per la tua directory'/'. O possibilmente hai un '/' di sola lettura e uno strato di lettura-scrittura in cima. –

7

Che ne dici di usare cron? Imposta un piccolo cron job che viene eseguito ogni minuto. Controlla se la tua applicazione è attiva (usando ps) e in caso contrario, riavviala.

Fai un piccolo script come questo:

#!/bin/bash 
if [ ! "$(pidof myapp)" ] 
then 
    /path/to/myapp & 
fi 

prova È se "myapp" è nella lista dei processi. "!" inverte il test. Se non è lì, esegue "myapp". "&" è solo così inizia in background.

Aggiungi questo a cron. A seconda del sistema e delle preferenze, ci sono diversi modi per farlo. Quello classico è usare crontab. C'è un sacco di documentazione su come specificare la propria linea di crontab, ma probabilmente volete qualcosa di simile:

* * * * * /path/to/the/script.sh > /dev/null 

Questo verrà eseguito il test ogni minuto di ogni ora di ogni ... Si ottiene l'idea.

+0

Ciao @Janne, grazie per la tua risposta. Ma il linux che sto usando è Busybox e non ha Cron. C'è un altro modo. –

+0

Quindi, un sistema integrato allora. Esattamente ciò che è disponibile dipende dal particolare linux installato su di esso (busybox è solo un'applicazione comunemente usata in molti piccoli sistemi). Se tutto il resto fallisce, puoi sempre scrivere una piccola app che si trova in un ciclo temporizzato e controlla l'elenco dei processi o qualche file di stato che l'app scrive, quindi riavvia il processo se necessario. – Janne

+0

@Janne è possibile creare un piccolo script che cerca il nome del processo mentre il pid cambia sempre? cordiali saluti, robert –

2

documentazione per il cane da guardia è qui: http://linux.die.net/man/8/watchdog

Ma sembra che questo non è ciò che si desidera. Il watchdog del software Linux riavvierà la macchina, non solo riavvia il processo.

È possibile creare facilmente il proprio cane da guardia. Ad esempio, è possibile che il proprio programma stampi periodicamente un file temporaneo e avvii uno script che verifica il file una volta ogni tanto e riavvia il processo se non è stato aggiornato per qualche tempo.

4

Usa /etc/inittab si può utilizzare per avviare negli specifici livelli di esecuzione e se è ucciso deve essere riavviato automaticamente

n:2345:respawn:/path/to/app 

In questo modo sarà respawn a livelli di esecuzione 2345 probabilmente solo bisogno di 3 e 5 ma funzionerà bene ed è integrato in Linux.

12

Dal momento che i moderatori ignorano post-miglioramenti ora dovrò di pubblicarlo separatamente

Il software watchdog Linux riavviare la macchina, non solo riavviare il processo.

Beh questo semplicemente non è vero, è molto possibile per riavviare i processi singoli o multipli, dopo i segnali di cane da guardia che i sistemi è appeso - si può anche interrompere il riavvio o fare un soft-reboot, uno è in grado di configurare "test" e "repair" -scripts/binari che fanno tutto ciò che si vuole che facciano. Il busybox-versione di cane da guardia è spogliato fino a un livello quasi inutilizzabile ... Credo che il mondo non saprà mai il motivo per cui le busybox-devs deciso di abbandonare le funzionalità primarie - per ora, sarebbe meglio evitare busybox a tutti - > i miglioramenti della velocità sono quasi inesistenti, la riduzione delle dimensioni non compensa l'enorme perdita di funzionalità./Bin/bash è piuttosto piccola - ricompilare tutto con la bandiera "-Os" se le dimensioni contano e siete pronti per andare - un cane da guardia out-of-the-box che permette di quasi tutto ciò che si potrebbe desiderare.

Oh, e per favore non creare il proprio cane da guardia - che molto probabilmente vi lascio con errori non gestiti e rendere la vita male un giorno.

+3

Benvenuti su SO. Le tue modifiche non sono state ignorate, ma considerate non valide, perché cambiano ciò che diceva il poster originale. Un commento sarebbe il modo appropriato per informarlo. Ma prima dovresti ottenere una certa reputazione, mi dispiace per quello. – pmr

+0

Ma se il watchdog segnala un blocco * di sistema *, questo non identifica un singolo processo da riavviare. Questa non è una risposta alla domanda: il monitoraggio di uno o più processi da un altro è un obiettivo legittimo, e non uno ottenuto tramite/dev/watchdog. La domanda non suggerisce nemmeno di creare il proprio cane da guardia; mostra semplicemente un fraintendimento della differenza tra il dispositivo/dev/watchdog e un processo di monitoraggio del software (o watchdog del software). – Clifford

1

Se si utilizza systemd ci sono 2 watchdog: uno per l'hardware (usando systemd.conf o utilizzando un daemon watchdog) e uno per i daemon inizializzati come servizi. Se systemd è la scelta di dare un'occhiata a quanto segue: http://0pointer.de/blog/projects/watchdog.html

0

Se qualcuno è arrivato a questa pagina alla ricerca di un cane da guardia del sistema operativo (che non è direttamente ciò che il PO voleva), questo è quello che vi serve:

sudo apt-get install watchdog 
service watchdog status 
service watchdog start 

per controllare che tutto funzioni eseguire:

tail -f /var/log/syslog | grep watchdog 

si dovrebbe vedere qualcosa di simile:

Jul 25 22:03:35 nuc watchdog[14229]: still alive after 733 interval(s) 
Jul 25 22:03:36 nuc watchdog[14229]: still alive after 734 interval(s) 
Jul 25 22:03:36 nuc watchdog[14229]: still alive after 735 interval(s) 
Jul 25 22:03:37 nuc watchdog[14229]: still alive after 736 interval(s) 
Jul 25 22:03:37 nuc watchdog[14229]: still alive after 737 interval(s) 

Spero di rispondere correttamente alla domanda. Tutte le altre risposte sembrano essere molto diverse.

0

Si può provare WDOG che è un programma di utilità scritto in C++ e che collega contro il quadro Kahless_9. Il codice sorgente per questo può essere scaricato da: https://github.com/zepher999/wdog e di conseguenza aggiornato per soddisfare le proprie esigenze. Ci sono ancora alcune modifiche all'elenco TODO necessarie per il futuro, ma come questo dovrebbe soddisfare i tuoi requisiti attuali.

L'utilità richiede un file csv come input in cui tutti i processi necessari per essere guardato con i loro argomenti sono contenuti. All'avvio, l'utilità avvia tutti questi processi designati nel file csv e li monitora per l'uscita/terminazione, dopo di che riavvia il processo.

Attualmente wdog consente l'arresto/l'abbattimento dei processi monitorati e la possibilità di avviare l'utilità in modalità caldo o freddo. La modalità Hot consente all'utilità di utilizzare i record memorizzati nella cache per monitorare i processi già avviati mentre la modalità a freddo inizia a eliminare tali valori memorizzati nella cache, tentando in tal modo di avviare tutti i processi.

L'utilità ha anche la possibilità di avviare un'istanza di se stesso per monitorare se stessa, quindi con un watchdog per il watchdog.