web-dev-qa-db-ja.com

Windowsでx秒後にTomcatを強制的にシャットダウンする方法は?

Linuxシステムでは、catalina.shのstopコマンドは、指定された秒数後にTomcatを強制的に強制終了するタイムアウトパラメーターを受け入れます。ただし、catalina.batにはそのようなパラメーターがないようです。 net stop Tomcatが発行されると、Tomcat(Windowsサービスとして実行)がシャットダウンを拒否するという問題が発生しています。この動作をWindowsボックスに実装する最良の方法は何でしょうか? taskkillの使用に関する投稿を見たことがありますが、スクリプト(PowerShell)でプロセスがまだ実行されていることを確認するにはどうすればよいですか。

3
Erik B

この例では、サービス名とプロセス名の両方が「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
}
4
jscott

Windowsサービスとして実行されているTomcatは、Windowsサービスマネージャーによって制御されます。

ネットストップを実行すると、stopコマンドがTomcatに送信されると思いますが、完全に停止するにはさらに時間が必要です。例えば。ネットストップを実行して十分長く待つと、Tomcatは最終的にシャットダウンします。 (FWIW、私はWindowsサーバーでTomcatを自分で管理しているので、これは構成されていませんが、数年にわたる実際の経験に基づいています。)

Taskkillを使用できます。これにより、すぐに終了します。プロセス名を使用できます。コードがまだTomcatで実行されている場合(dbへの書き込みなど)、それは厄介かもしれません。

通常、最善のアプローチは、ネットストップを実行して実際に終了するのを待つか、アプリ開発者にシャットダウンを適切に機能させるように依頼することです(たとえば、アプリが停止要求により迅速に応答して、Tomcatが迅速にシャットダウンするようにします)。 )。

それに失敗しても、終了の影響が心配されなければtaskkillは問題ありません。