Как успешно убить процесс Java и перезапустить его в Unix? - PullRequest
2 голосов
/ 26 мая 2011

Я пытался запустить свою Java-программу на ночь, но мне нужно иногда перезапускать ее, чтобы сохранить прогресс и полностью перезагрузить компьютер. Через несколько часов я сохраняю ход выполнения программы и запускаю небольшой файл перезапуска, чтобы перезапустить программу.

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

Внутри restart.bat у меня есть:

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

Однако это не работает. Там написано:

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

Почему говорится, что ни один процесс не завершен, когда запущен Java-процесс? И почему он говорит, что команда не найдена? Она никогда не перезапускает программу.

Ответы [ 3 ]

1 голос
/ 26 мая 2011

безопасно ли для вашей JVM быть убитым, как этот средний процесс?Если нет, то вы можете рассмотреть бин JMX для проверки состояния программы и завершения работы изнутри JVM.

1 голос
/ 26 мая 2011

Вместо запуска приложения с самого сервера, вы можете сделать такой скрипт:

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

Это перезапустит процесс после его выхода. А после сохранения просто выйдите, и он автоматически перезагрузится.

1 голос
/ 26 мая 2011

Как насчет размещения #!/bin/sh или чего-то подобного в качестве первой строки вашего restart.bat

Кстати, .bat - очень плохой выбор расширения в системе Linux.

...