【问题标题】:'exec' command blocks the running of php script when execute SchTasks'exec' 命令在执行 SchTasks 时阻止 php 脚本的运行
【发布时间】:2015-03-18 19:05:15
【问题描述】:

我使用以下脚本 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 脚本的执行。 如何避免这种阻塞?

【问题讨论】:

    标签: php windows-task-scheduler


    【解决方案1】:

    有一种方法可以强制 shell 立即返回,方法是使用 popen 将 & 符号附加到命令行:

    #                            ⇓
    popen("$archive_command 2>&1 &", "r");
    

    如果你没问题,那很好。如果没有,请告诉我。还有另一种更复杂的方法可以解决在另一个线程中启动 shell 的问题。

    【讨论】:

    • 你确定你试过popen而不是exec
    【解决方案2】:

    试试这个

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

    【讨论】:

    • 是的,它可以工作,但会显示以下警告:(+)警告:popen() 只需要 2 个参数,1 在 .... 行中给出 (+)警告:pclose() 需要参数 1作为资源,给定为空
    猜你喜欢
    • 1970-01-01
    • 2017-12-07
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-07
    • 2012-10-09
    • 1970-01-01
    相关资源
    最近更新 更多