2014-02-12 5 views
1

Я попытался это:Как можно перезагрузить Tomcat в Linux из webapp внутри Tomcat?

Но только выключение работало должным образом, Tomcat не запуск должным образом, я думаю, проблема заключалась в том, что предыдущий экземпляр до сих пор используется порт 8080. Я добавил 2м сон между двумя командами (разделенный & &), но в этом случае произошло выключение, но ничего не произошло позже в соответствии с каталогом журнала, без ошибок, запуск не был выполнен вообще.

(первый раз я пытался без/бен/Баш -c, но в этом случае ничего не произошло.)

+0

Итак, если вы отключили сервер и все приложения, запущенные в нем, как вы ожидаете, что он снова начнется с одного из приложений? – mikea

+0

Я за исключением того, что он снова запущен оболочкой. Это работало в Windows: Runtime.getRuntime(). Exec ("cmd/c start shutdown.bat && start startup.bat"); – Zabalint

+0

Возможно ли запустить спящий режим и запуск в фоновом режиме, и отдельно завершить работу? – Zabalint

ответ

1

Никогда не используйте Runtime.getRuntime().exec(String). Это не работает так, как ожидают люди. Используйте версию, которая принимает вместо этого String[].

Кроме того, запустите его в фоновом режиме и перенаправьте stdout/stderr, иначе он будет блокировать ожидание процесса ввода java.

Runtime.getRuntime().exec(new String[] { 
    "/bin/bash", "-c", 
    "(" + 
    System.getProperty("catalina.home") + "/bin/shutdown.sh && " +   
    System.getProperty("catalina.home") + "/bin/startup.sh" + 
    ") > ~/restart.log 2>&1 &" 
}); 

Здесь пишет ~/restart.log, так что, если это не удается, вы можете увидеть сообщения об ошибках. Вы можете заменить его /dev/null, когда он будет работать.

я настоятельно рекомендую создать новый сценарий restart_tomcat, который делает все это фоновый и переназначение, так что вы можете уменьшить это

Runtime.getRuntime().exec(new String[] { "/path/to/restart_tomcat" }); 

Это проще и более гибко работать со сценарием, в файловой системе, чем скрипт, встроенный в Java-код.

+0

Благодарим вас за ответ. Прежде чем вы ответили, я попробовал то же самое с exec (String), но это не сработало, но это решение почти работает, единственная проблема заключается в том, что shutdown.sh также запускает фоновый процесс, который останавливает tomcat, а основной процесс возвращается, поэтому startup.sh запускается до завершения работы, поэтому Tomcat не может быть запущен должным образом, поскольку его порты все еще используются. Вот почему я добавил сон 2m между сценарием 2, и теперь он работает (остановка tomcat с текущими приложениями намного меньше 2 минут). – Zabalint

+0

@ Zabalint, используйте сон 120? Я пробовал, но не смог. –

Смежные вопросы