【2026年版】Tomcatを定期的に再起動するBATファイル|タスク設定

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ファイルを手動でテストする

  1. コマンドプロンプトを「管理者として実行」する
  2. BATファイルを実行する
  3. C:\Logs\tomcat-restart.logを確認する
  4. 次のコマンドでTomcatがRUNNINGになっていることを確認する
sc query "Tomcat11"

Tomcat ManagerやアプリケーションのヘルスチェックURLがある場合は、HTTP応答まで確認してください。

タスクスケジューラで定期実行する

  1. スタートメニューで「タスク スケジューラ」を開く
  2. 「基本タスクの作成」ではなく「タスクの作成」を選ぶ
  3. 「全般」で「ユーザーがログオンしているかどうかにかかわらず実行する」と「最上位の特権で実行する」を有効にする
  4. 「トリガー」で実行日時を設定する
  5. 「操作」で「プログラムの開始」を選び、BATファイルの絶対パスを指定する
  6. 「設定」で、予定時刻に開始できなかった場合の再実行を有効にする

アクセスが少ない時間を選び、ロードバランサー配下では対象サーバーを切り離してから再起動するなど、利用者への影響を避けてください。

よくあるエラー

指定されたサービスはインストールされたサービスとして存在しません

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で確認できます。

まとめ

  • 正しいサービス名を先に確認する
  • 停止完了を待ってから起動する
  • 管理者権限とログ出力を設定する
  • タスクスケジューラでは最上位の特権で実行する
  • 定期再起動だけで障害原因を放置しない

この記事が役に立ったら

応援は任意です。記事はこれまでどおり無料で読めます。

このページをシェアする

コメント

タイトルとURLをコピーしました