'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 &"); 
 }
}