Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在后台执行多个PHP脚本_Php_Background_Laravel_Gearman_Worker - Fatal编程技术网

在后台执行多个PHP脚本

在后台执行多个PHP脚本,php,background,laravel,gearman,worker,Php,Background,Laravel,Gearman,Worker,我正在编写一个需要在后台执行PHP脚本的web应用程序。队列的问题在于,它一次只能处理一个队列。我的问题是,如何让Beanstalk同时处理更多作业,或者如何在后台执行脚本,直到用户手动停止为止。我使用的是Laravel4,所以我可以使用所有这些方法 提前谢谢 顺便说一句,API也帮不了我 <?php class Workers { public function fire($job, $data) { $login = Login::find($data['i

我正在编写一个需要在后台执行PHP脚本的web应用程序。队列的问题在于,它一次只能处理一个队列。我的问题是,如何让Beanstalk同时处理更多作业,或者如何在后台执行脚本,直到用户手动停止为止。我使用的是Laravel4,所以我可以使用所有这些方法

提前谢谢

顺便说一句,API也帮不了我

<?php

class Workers {

    public function fire($job, $data) {
        $login = Login::find($data['id']);
        if ($login->active == 0) {
            $job->delete();
        }

        $job->release();
    }
}

大约2.5年前,我为PHP deamons实现了一个解决方案。我的应用程序在一个封闭的环境中运行,只有少数用户。因此,实际上并不需要可伸缩性、性能和安全性

我基本上是以CLI模式作为单个PHP应用程序启动deamons的

function startDeamon($daemonPath, $args = ""){
    $phppath = "/../../php/php"; // points to php executable
    $executionstring = $phppath." -f ".$daemonPath." ".$args;
    execInBackground($executionstring);
}

function execInBackground($cmd){
    if (substr(php_uname(), 0, 7) == "Windows"){
        pclose(popen("start /B". $cmd, "r")); // Windows
    } else {
        exec($cmd . " > /dev/null &"); // Operating systems like unix
    }
}
通过调用
startDaemon
,使用守护程序脚本的路径和要提供的参数,可以在web服务器上启动一个单独的进程。守护进程脚本一终止,进程就结束

通过访问
$argv
数组,可以在守护进程中读取参数,如下所示:

 $myJobIs = $argv[1];
请记住,此解决方案非常占用内存,因为每个启动的进程都可能占用5MB或更多内存。(但这取决于PHP安装、系统和脚本)


您还需要允许PHP打开新进程/运行exec函数,这可能不是您想要做的事情。

您需要更具体地告诉我,告诉我们您正在尝试做什么,显示一些代码,以便我们可以帮助您。它可以去任何地方,请参阅。很可能您希望容纳您的应用程序逻辑。我对问题进行了编辑,以使其更加清晰和准确<代码>由于内容太广泛而搁置我希望大家都清楚?