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, en un script de shell.
Por cierto, el estado del proceso es T
lo que significa detenido por lo que yo sé.
EDITAR: Lamentablemente, 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 que no responde, mientras que el menú contextual del elemento del muelle sí lo hace (ver figura)
Mire el launchctl
que es una interfaz para launchd
daemon.
La tarea principal de este demonio es cuidar de todos los demonios del sistema y de los usuarios. Este cuidado incluye la posibilidad de reiniciar un demonio cada vez que se cierra o falla.
Para empezar, te aconsejo que leas:
man launchd
man launchctl
Luego, eche un vistazo a uno de los plist
archivos más simples utilizados por el sistema para ayudarlo a escribir uno propio para inspeccionar JVM y reinícielo si es necesario:
/System/Library/LaunchDaemons/com.apple.autofsd.plist
Use LaunchD, es lo que Mac OS X usa para ejecutar y monitorear programas. Deberá crear un archivo LaunchAgent o LaunchDaemon, y puede especificar que debe eliminarse y reiniciarse si alcanza el estado T.
Una forma tal vez usando applescript como se muestra aquí . Otro tal vez por la herramienta de secuencias de comandos sikuli
.
Sikuli observa tu pantalla y puede responder según lo que ve. Entonces, si se encuentra Not Responding
en la pantalla, se puede programar para que actúe.
Aquí hay un hilo que discute un problema similar al suyo que también proporciona el siguiente script como 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()
Vic
Mahatma_Fatal_Error
Vic