#java #tomcat
Решил написать рестартер Tomcat'a. Но вот проблема, после вызова shutdown.bat и startup.bat консоли через которые я их вызвал не закрываются Runtime.getRuntime().exec("cmd /c start "+tomcatPath+"\\bin\\shutdown.bat"); Runtime.getRuntime().exec("cmd /c start "+tomcatPath+"\\bin\\startup.bat"); Подскажите пожалуйста, может есть какой-то способ их закрывать, а то вручную это делать как то не очень.
Ответы
Ответ 1
Можно попытаться разобраться, что происходит во время выполнения команды exec("cmd /c start "+tomcatPath+"\\bin\\shutdown.bat"). Запускается первый cmd /c в режиме завершения работы сразу после выполнения переданной ему команды Он запускает в новом окне новый, второй cmd, но в режиме продолжения работы после выполнения команды Последний исполняет shutdown.bat, который вызывает call catalina.bat в этом же интерпретаторе catalina.bat выполняет что-то вроде start java org.apache.catalina.startup.Bootstrap stop, т.е. открывает новое окно, в котором запускается java-приложение. catalina.bat, не ожидая завершения java-приложения, продолжает выполнение. Но других команд нет, поэтому управление возвращается в shutdown.bat shutdown.bat тоже на этом завершается, и управление возвращается во второй cmd, который ожидает от пользователя следующих команд. Вот оно, незакрытое окно. Что тут можно сделать? Например, изменить режим запуска второго командного интерпретатора: "cmd /c start cmd /c "+tomcatPath+"\\bin\\shutdown.bat" В этом случае, завершив обработку shutdown.bat, cmd тоже закроется, и окошко исчезнет. Можно отказаться от вызова первого интерпретатора: Runtime.getRuntime().exec(tomcatPath+"\\bin\\shutdown.bat").waitFor(); Runtime.getRuntime().exec(tomcatPath+"\\bin\\startup.bat").waitFor();
Комментариев нет:
Отправить комментарий