我有一个需要每6秒运行一次的php脚本。由于Windows任务计划程序仅允许1分钟的间隔。所以我编写了一个task.bat文件来启动一个循环,每6秒启动一次subask.bat(启动PHP脚本)。任务计划程序每2分钟启动一次task.bat。
所以启动顺序是这样的:
调度工作正常,但有一个问题:当task.bat调用subtask.bat需要很长时间才能完成。例如,如果我单独运行subtask.bat,则需要2秒才能完成。但是当task.bat调用它时,将需要将近30秒才能完成。
我需要解决这个问题,但不知道在哪里看。
这是我的task.bat文件:
for /l %%y in (1,1,2) do (
@echo TaskStart at 1min interval
for /l %%x in (1, 1, 9) do (
@echo Subtask (%%y : %%x)
@start "" /MIN "subtask.bat"
@ping 127.0.0.1 -n 6 > nul
)
)
exit 0
这是subtask.bat
%PHP_PATH%\php.exe -c %PHP_INI_PATH%\php.ini ../public/index.php --method="POST" --uri="/cron/sync" --header="Content-Type:application/json" --body="{\"offset\":\"0\",\"count\":\"1\",\"type\":\"TYPE1\"}"
exit 0
PHP脚本是用Slim框架编写的,所以sub_task.bat实际上模拟了一个带有一些参数的端点的POST请求。 PHP脚本基本上执行以下操作:
更新: 我们需要在新线程或新进程中运行每个子任务,以便每个迭代都不会被任何单个子任务阻塞。
答案 0 :(得分:0)
您可以在一个批处理文件中执行所有操作,这意味着您在task.bat中包含子任务并在那里调用它。
for /l %%y in (1,1,2) do (
@echo TaskStart at 1min interval
for /l %%x in (1, 1, 9) do (
@echo Subtask (%%y : %%x)
@call :subtask
@ping 127.0.0.1 -n 6 > nul
)
)
exit 0
:subtask
%PHP_PATH%\php.exe -c %PHP_INI_PATH%\php.ini ../public/index.php --method="POST" --uri="/cron/sync" --header="Content-Type:application/json" --body="{\"offset\":\"0\",\"count\":\"1\",\"type\":\"TYPE1\"}"
GOTO :eof
我没有对它进行过测试,但它应该有效。