如何在后台任务中执行(' php task')并检查进度

时间:2017-09-08 09:11:45

标签: php yii2 apache2

在Ubuntu 16.04上运行Yii2。我想启动后台任务,然后查询它的状态。任务开始正常,但来自客户端的查询在服务器任务结束之前不会得到响应。

服务器代码

function actionRun($arguments)
{    
    $paramsJson = json_encode($arguments);
    $script = 'php /var/www/html/app/yii consolecontroller/action';
    $command = "{$script} '{$paramsJson}' > /dev/null 2>&1 &";
    exec($command);
}

客户代码

$('#buttonSubmit').on('click', function (event) {
    event.preventDefault();
    setTimeout(function () {updateJobProgress();}, 100);

    $.ajax({
        url: printForm.attr('action'),
        type: 'post',
        data: printForm.serialize()
    });

    function updateJobProgress() {
        var reportJob = $('input[name="reportJobId"]');
        $.ajax({
            url:reportJob.data('status'),
            data:{reportJobId: reportJob.val()},
            success:function(data) {
                if (data.progressStatus < 5000) {
                    reportJob.html('processing');
                } else {
                    reportJob.html('done');
                }
            }
        });
        setTimeout(function() {updateJobProgress();}, 700);
    }
});

1 个答案:

答案 0 :(得分:0)

经过一些测试,我发现Yii2正在处理ob刷新和会话。 AJAX调用在190ms内返回响应200,但后续的ajax调用检查状态没有得到响应。

后续请求未获得响应的原因是因为xdebug。我关掉了xdebug,一切正常。我编辑了文件/etc/php/7.0/mods-available/xdegub.ini并将xdebug.remote_autostart从1更改为0.这会阻止xdebug一直运行。现在,当我想使用xdebug时,我只是在浏览器上使用扩展程序来激活它。