Cómo matar con éxito un proceso java y reiniciar en unix?

He estado tratando de ejecutar mi programa java la noche a la mañana, pero tengo que reiniciar a veces para guardar sus progresos y completamente reiniciar la máquina. Después de un par de horas tengo el programa de guardar su progreso y ejecutar un poco de reiniciar archivo de reiniciar el programa.

void restartServer() {
    try {
        Runtime rt = Runtime.getRuntime();
        rt.exec("./restart.bat");
    } catch (java.io.IOException err) {
        logError(err.getMessage());
    }
}

Dentro de reiniciar.palo que tengo:

echo Restarting Server
killall -9 java
sleep 2;
nohup java -Xmx200m -classpath bin server.Main;

Sin embargo no funciona. Dice:

[[email protected] java]# ./restart.bat
Restarting Server
: no process killed
: command not found 3:
nohup: appending output to `nohup.out'
: command not found 4:
[[email protected] java]#

¿Por qué dicen que no hay ningún proceso que murieron cuando hay un proceso java que se ejecuta? Y ¿por qué dice comando no encontrado? Nunca se reinicia el programa.

  • No esta potencialmente matar a sí mismo antes de administrar el lanzamiento del nuevo proceso java?
  • Buen punto. Creo que podría suceder.
  • Oops. Se me olvidó poner un sueño antes de la killall. Que debe resolver lo creo.
InformationsquelleAutor Kyle | 2011-05-25

3 Kommentare

  1. 1

    Acerca de cómo poner #!/bin/sh o algo así como la primera línea de su restart.bat

    Por CIERTO, .bat es una muy mala elección de extensión en un sistema linux.

    • es .sh una mejor extensión?
    • Si estás en Linux, sí.
    • Alex que hizo el truco gracias:) Antes de que el trabajo tenía que ejecutar dos2unix en el guión. Pero funcionó!
  2. 1

    es seguro para su JVM a ser asesinados como que a mediados de proceso? Si no, usted podría considerar la posibilidad de un JMX bean para comprobar el estado del programa y hacer el cierre desde el interior de la JVM.

    • Así en el programa antes de ejecutar el restartServer() void yo también ejecutar una saveProgress() vacío. Nunca pensé acerca de cerrar desde el interior de la JVM. Supongo que me podría llamar a un paro, y ejecutar el programa después de dormir por un buen 10-15 segundos, que debería ser suficiente tiempo para que se cierre?
  3. 1

    Lugar de iniciar la aplicación desde el propio servidor, usted podría hacer un script como este:

    #!/bin/sh
    while [ 1 ]
    do
        nohup java -Xmx200m -classpath bin server.Main;
    done

    Esto reiniciará el proceso una vez que se cierra. Y después de su savestate acaba de salir y se reiniciará automáticamente.

    • Así que si puedo ejecutar esta secuencia de comandos para ejecutar en el fondo, yo podría salir de la JVM, y esto se reinicie?

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea