2026年10月7日、Windows 11/Windows ServerとTomcat 9・10・11を想定して内容を更新しました。
Windowsサービスとして動作しているApache Tomcatを、BATファイルとタスクスケジューラで定期的に再起動する方法を解説します。
下記のBATファイルで再起動できます。ただし、定期再起動はメモリリークなどの根本解決ではありません。まずログを確認し、必要な場合だけ計画停止として利用してください。
最初にTomcatのサービス名を確認する
TomcatのバージョンとWindowsサービス名は必ずしも同じではありません。管理者としてコマンドプロンプトを開き、次のコマンドで確認します。
sc query type= service state= all | findstr /I "Tomcat Apache"
Apache公式のWindows Serviceでは、標準のサービス名はTomcat 11ならTomcat11です。環境によって独自名が設定されているため、表示されたSERVICE_NAMEを使ってください。
コピペで使えるTomcat再起動BAT
次の内容をrestart-tomcat.batなどの名前で保存します。SERVICEとLOG_DIRは環境に合わせて変更してください。
@echo off
setlocal EnableExtensions EnableDelayedExpansion
rem ===== 環境に合わせて変更 =====
set "SERVICE=Tomcat11"
set "LOG_DIR=C:\Logs"
set "MAX_WAIT=60"
rem ============================
if not exist "%LOG_DIR%" mkdir "%LOG_DIR%"
set "LOG=%LOG_DIR%\tomcat-restart.log"
echo.>>"%LOG%"
echo [%date% %time%] restart start: %SERVICE%>>"%LOG%"
sc query "%SERVICE%" >nul 2>&1
if errorlevel 1 (
echo [%date% %time%] ERROR: service not found>>"%LOG%"
exit /b 2
)
net stop "%SERVICE%" /y >>"%LOG%" 2>&1
call :WAIT_STATE STOPPED
if errorlevel 1 (
echo [%date% %time%] ERROR: stop timeout>>"%LOG%"
exit /b 3
)
net start "%SERVICE%" >>"%LOG%" 2>&1
call :WAIT_STATE RUNNING
if errorlevel 1 (
echo [%date% %time%] ERROR: start timeout>>"%LOG%"
exit /b 4
)
echo [%date% %time%] restart completed>>"%LOG%"
exit /b 0
:WAIT_STATE
set /a ELAPSED=0
:WAIT_LOOP
set "CURRENT_STATE="
for /f "tokens=3" %%S in ('sc query "%SERVICE%" ^| findstr "STATE"') do set "CURRENT_STATE=%%S"
if /I "!CURRENT_STATE!"=="%~1" exit /b 0
if !ELAPSED! GEQ %MAX_WAIT% exit /b 1
timeout /t 5 /nobreak >nul
set /a ELAPSED+=5
goto WAIT_LOOP
BATファイルを手動でテストする
- コマンドプロンプトを「管理者として実行」する
- BATファイルを実行する
C:\Logs\tomcat-restart.logを確認する- 次のコマンドでTomcatが
RUNNINGになっていることを確認する
sc query "Tomcat11"
Tomcat ManagerやアプリケーションのヘルスチェックURLがある場合は、HTTP応答まで確認してください。
タスクスケジューラで定期実行する
- スタートメニューで「タスク スケジューラ」を開く
- 「基本タスクの作成」ではなく「タスクの作成」を選ぶ
- 「全般」で「ユーザーがログオンしているかどうかにかかわらず実行する」と「最上位の特権で実行する」を有効にする
- 「トリガー」で実行日時を設定する
- 「操作」で「プログラムの開始」を選び、BATファイルの絶対パスを指定する
- 「設定」で、予定時刻に開始できなかった場合の再実行を有効にする
アクセスが少ない時間を選び、ロードバランサー配下では対象サーバーを切り離してから再起動するなど、利用者への影響を避けてください。
よくあるエラー
指定されたサービスはインストールされたサービスとして存在しません
SERVICEに表示名ではなく正確なサービス名を指定します。services.mscのプロパティ、またはsc queryで確認してください。
システム エラー 5:アクセスが拒否されました
管理者権限が不足しています。手動テストは管理者として実行し、タスクスケジューラでは「最上位の特権で実行する」を有効にします。
停止または起動がタイムアウトする
Tomcatのログ、アプリケーションログ、Javaプロセスを確認してください。単純に強制終了を追加すると処理中のリクエストやデータを壊す可能性があるため、原因を調査します。
Tomcat 9・10・11で変える場所
| バージョン | 標準的なサービス名 |
|---|---|
| Tomcat 9 | Tomcat9 |
| Tomcat 10 | Tomcat10 |
| Tomcat 11 | Tomcat11 |
独自名でインストールした場合は表と異なります。Apache Tomcat 11のWindowsサービス仕様は公式Windows Service How-Toで確認できます。
まとめ
- 正しいサービス名を先に確認する
- 停止完了を待ってから起動する
- 管理者権限とログ出力を設定する
- タスクスケジューラでは最上位の特権で実行する
- 定期再起動だけで障害原因を放置しない


コメント