Windows Server 2012 で Web アプリケーションを実行していますが、PHP ファイルで無限ループを実行する必要があります。これを制御するために、2 つのバッチ ファイルを作成しました。
PHP ファイル:
<?php
while(true) {
sleep(10);
}
?>
PHP ファイルを呼び出す BatchFile:
TITLE WatchdogStarterBATCH
php "%~dp0watchdog.php"
timeout 5
バッチファイル 2
@ECHO OFF
:: Detect whether program is running
for /f "tokens=2 delims=," %%P in ('tasklist /v /fo csv ^| findstr /i "WatchdogStarterBATCH"') do set pid=%%~P
IF [%pid%] == [] (
:: Program not running, trying to restart
start "WatchdogStarterBATCH" "%~dp0WatchdogStarter.bat"
timeout 5
GOTO rerun
) ELSE (
:: Program is running
GOTO end
)
:rerun
:: Check whether program is running now
for /f "tokens=2 delims=," %%P in ('tasklist /v /fo csv ^| findstr /i "WatchdogStarterBATCH"') do set pid=%%~P
IF [%pid%] == [] (
:: Restart failed, log to database
php "%~dp0WatchdogErrorLogger.php"
) ELSE (
:: Restart successful, log to database
php "%~dp0WatchdogWarningLogger.php"
GOTO end
)
:end
echo Done.
timeout 5
バッチファイル 2 はタスク スケジューラによって呼び出され、ご覧のように WatchdogStarter.bat を呼び出します。後でタスクリストで見つけられるように、このサービスに名前を付けようとします。
私が試したこと:
- コマンドラインからbatfile2を実行し、タスクリストに文字列「WatchdogStarterBATCH」があるかどうかを確認します。私はそれを見つけることができたので、うまくいきます。
- 私が使用した「開始」コマンドで名前を割り当ててみましたが、役に立ちませんでした。
- 最初のバッチ ファイルに「TITLE」という名前を付けてみましたが、うまくいきませんでした。