Script di shell per riavviare un determinato processo se non risponde

2

Ho bisogno di un'applicazione java per l'esecuzione 24/7 sul mio mac. Sfortunatamente il processo JVM a volte si blocca e quindi l'applicazione java non risponde più.

C'è la possibilità di rilevare se un determinato processo si è arrestato in modo anomalo (o almeno non è in uno stato di esecuzione corretto) e riavviare questo processo specifico successivamente?

Ho trovato

ps aux|grep java

che elenca il processo java ( /usr/bin/java )

Ora ho bisogno di sapere come osservare i codici di stato del processo e come riavviare questo particolare processo, ad es. uno script di shell.

BTW, lo stato del processo è T che significa arrestato per quanto ne so.

EDIT: Sfortunatamente quattro suggerimenti non hanno funzionato sulla mia macchina. Ho configurato un agente globale e il jar si sta avviando correttamente ma il processo non riesce ancora dopo un certo periodo di tempo. Stranamente il processo nel monitor di attività non è contrassegnato come non risponde, mentre il menu di scelta rapida dell'elemento dock fa (vedi figura)

    
posta Mahatma_Fatal_Error 28.01.2015 - 16:42
fonte

3 risposte

2

Guarda launchctl che è un'interfaccia a launchd daemon.

Questo compito principale del demone è di prendersi cura di tutto il sistema e gli utenti demoni. Questa cura include la possibilità di riavviare un daemon ogni volta si chiude o si blocca.

Per cominciare, ti consiglio di leggere:

man launchd
man launchctl

Quindi dai un'occhiata a uno dei file plist più semplici usati da sistema per aiutarti a scrivere il tuo per esaminare JVM e riavviarlo se necessario:

/System/Library/LaunchDaemons/com.apple.autofsd.plist
    
risposta data 28.01.2015 - 19:55
fonte
1

Usa LaunchD, è ciò che Mac OS X utilizza per la gestione e il monitoraggio dei programmi. Dovrai creare un file LaunchAgent o LaunchDaemon, e puoi specificare che debba essere ucciso e riavviato se raggiunge lo stato T.

    
risposta data 28.01.2015 - 21:06
fonte
0

Un modo forse usando il applescript come mostrato qui . Un altro forse dallo strumento di scripting sikuli .

Sikuli guarda il tuo schermo e può rispondere in base a ciò che vede. Quindi, se trova Not Responding sullo schermo, può essere programmato per agire.

Qui è un thread che discute un problema simile al tuo che fornisce anche la seguente script come soluzione al loro problema. Il sito web sikuli ha tutta la documentazione di cui hai bisogno. Buona fortuna.

while True:

def Kill(e):

openApp("/Users/Admin/Desktop/KillPrintSmith.app")

def Open(e):

openApp("/Applications/PrintSmith WS Folder/PrintSmith WS.app")

onAppear(#screenshot of Not Responding Text#,Kill)

onVanish(#screenshot of Printsmith dock icon#,Open)

observe() 
    
risposta data 28.01.2015 - 19:56
fonte

Leggi altre domande sui tag