Как заставить 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 в порядке, если вы не беспокоитесь о том, каков будет эффект прекращения.

Другие вопросы по тегам