'exec' 命令在执行 SchTasks 时阻塞 php 脚本的 运行
'exec' command blocks the running of php script when execute SchTasks
我使用以下脚本 php 来安排归档任务:
$archive_command = 'SchTasks /Create /SC monthly /MO lastday /TN archive'.date('Y_m').' /TR PHP_BINARY." ".$SCRIPT_DIR.archive.php /M * /ST 23:30';
exec("$archive_command 2>&1");
但是当执行 SchTasks
重新创建相同的任务时,它会阻止 php 脚本的执行。
如何避免这种阻塞?
有一种方法可以通过在命令行中添加符号 popen
:
来立即将 shell 强制为 return
# ⇓
popen("$archive_command 2>&1 &", "r");
如果您不介意,那很好。如果没有,请告诉我。还有另一种更复杂的方法可以解决在另一个线程中启动 shell 的问题。
试试这个
pclose(popen("$archive_command 2>&1 &", "r"));
更新:
我从另一个网站选择了这个功能:
function bgExec($cmd) {
if(substr(php_uname(), 0, 7) == "Windows"){
pclose(popen("start /B ". $cmd, "r"));
} else {
exec($cmd . " > /dev/null &");
}
}
我使用以下脚本 php 来安排归档任务:
$archive_command = 'SchTasks /Create /SC monthly /MO lastday /TN archive'.date('Y_m').' /TR PHP_BINARY." ".$SCRIPT_DIR.archive.php /M * /ST 23:30';
exec("$archive_command 2>&1");
但是当执行 SchTasks
重新创建相同的任务时,它会阻止 php 脚本的执行。
如何避免这种阻塞?
有一种方法可以通过在命令行中添加符号 popen
:
# ⇓
popen("$archive_command 2>&1 &", "r");
如果您不介意,那很好。如果没有,请告诉我。还有另一种更复杂的方法可以解决在另一个线程中启动 shell 的问题。
试试这个
pclose(popen("$archive_command 2>&1 &", "r"));
更新: 我从另一个网站选择了这个功能:
function bgExec($cmd) {
if(substr(php_uname(), 0, 7) == "Windows"){
pclose(popen("start /B ". $cmd, "r"));
} else {
exec($cmd . " > /dev/null &");
}
}