Я запускаю веб-приложение на Windows Server 2012 и должен запустить бесконечный цикл в файле PHP. Чтобы контролировать это, я создал два командных файла.
PHP-файл:
<?php
while(true) {
sleep(10);
}
?>
BatchFile, который вызывает файл PHP:
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», но это не помогло.