Script de shell para reiniciar un proceso determinado si no responde

2

Necesito una aplicación java para ejecutar 24/7 en mi mac. Desafortunadamente, el proceso JVM a veces se atasca y, por lo tanto, la aplicación java ya no responde.

¿Existe la posibilidad de detectar si un proceso determinado se ha bloqueado (o al menos no se encuentra en un estado de ejecución adecuado) y reiniciar este proceso específico posteriormente?

Encontré

ps aux|grep java

que enumera el proceso java ( /usr/bin/java )

Ahora necesito saber cómo ver los códigos de estado del proceso y cómo reiniciar este proceso en particular, por ejemplo. un script de shell.

Por cierto, el estado del proceso es T , lo que significa que se detuvo por lo que sé.

EDITAR: Desafortunadamente cuatro sugerencias no funcionaron en mi máquina. Configuré un agente global y el jar se está iniciando correctamente, pero el proceso aún falla después de un cierto período de tiempo. Por extraño que parezca, el proceso en el monitor de actividad no está marcado como no responde, mientras que el menú contextual del elemento de acoplamiento sí lo hace (ver la figura)

    
pregunta Mahatma_Fatal_Error 28.01.2015 - 16:42

3 respuestas

2

Mira el launchctl que es una interfaz para el daemon launchd .

La tarea principal de este daemon es cuidar todo el sistema y los usuarios. demonios Este cuidado incluye la posibilidad de reiniciar un demonio siempre que se cierra o se bloquea.

Para empezar, te aconsejo que leas:

man launchd
man launchctl

Luego, eche un vistazo a uno de los archivos plist más simples utilizados por Sistema para ayudarlo a escribir su propio informe de JVM y reiniciarlo si es necesario:

/System/Library/LaunchDaemons/com.apple.autofsd.plist
    
respondido por el daniel Azuelos 28.01.2015 - 19:55
1

Use LaunchD, es lo que Mac OS X se usa para ejecutar y monitorear programas. Necesitará crear un archivo LaunchAgent o LaunchDaemon, y puede especificar que se elimine y reinicie si alcanza el estado T.

    
respondido por el John Keates 28.01.2015 - 21:06
0

Una forma tal vez sea utilizando applecript como se muestra aquí . Otro tal vez por la herramienta de secuencias de comandos sikuli .

Sikuli mira tu pantalla y puede responder en función de lo que ve. Por lo tanto, si encuentra Not Responding en la pantalla, se puede crear un script para que actúe.

Aquí es un hilo que discute un problema similar al tuyo, que también proporciona el siguiente script como una solución a su problema. El sitio web de sikuli tiene toda la documentación que necesita. Buena suerte.

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() 
    
respondido por el Vic 28.01.2015 - 19:56

Lea otras preguntas en las etiquetas