Как заставить Tomcat отключиться через x секунд на окнах?
В системах linux команда stop в catalina.sh принимает параметр тайм-аута, который принудительно убивает tomcat через указанное количество секунд. Однако, похоже, что catalina.bat не имеет такого параметра. У нас возникают проблемы с тем, что наш tomcat (работающий в качестве службы Windows) отказывается завершать работу, когда net stop tomcat
выпущен. Каков наилучший способ реализовать это поведение в окне Windows? Я видел посты про usning taskkill
, но как мне лучше узнать, что процесс все еще выполняется в моем скрипте (powershell).
2 ответа
В этом примере предполагается, что имя службы и имя процесса - "tomcat".
# Ask service, nicely, to stop
Stop-Service -Name 'tomcat'
# Give service a bit to tidy up.
Start-Sleep -Seconds 30
# If the service isn't stopped yet, end the process forcefully.
if ( (Get-Service -Name 'tomcat').Status -ne 'Stopped' ) {
Stop-Process -ProcessName 'tomcat' -Force
}
Tomcat, работающий в качестве службы Windows, контролируется диспетчером службы Windows.
Когда вы делаете остановку сети, я предполагаю, что команда останова отправляется tomcat, но ей просто нужно больше времени для полной остановки. Например, если вы делаете сетевую остановку и ждете достаточно долго, tomcat в конечном итоге отключается. (FWIW, я сам управляю tomcat на windows server, так что это не выдумка, а основано на реальном опыте за несколько лет.)
Вы можете использовать taskkill, это сразу же прекратит его. Вы можете использовать имя процесса. Если код все еще выполняется в Tomcat (запись в БД или тому подобное), это может быть грязно.
Как правило, наилучший подход - это либо сделать остановку сети и дождаться ее завершения, либо попросить разработчика приложения правильно завершить работу (например, чтобы приложение быстрее реагировало на запрос на остановку, чтобы tomcat быстро выключался)).
В противном случае, Taskkill в порядке, если вы не беспокоитесь о том, каков будет эффект прекращения.