我在 Windows Server 2012 上运行一个 web 应用程序,并且必须在 PHP 文件中运行一个无限循环。为了控制这一点,我创建了两个批处理文件。
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”指定一个名称,但这没有帮助。