在后台执行多个PHP脚本
我正在编写一个需要在后台执行PHP脚本的web应用程序。队列的问题在于,它一次只能处理一个队列。我的问题是,如何让Beanstalk同时处理更多作业,或者如何在后台执行脚本,直到用户手动停止为止。我使用的是Laravel4,所以我可以使用所有这些方法 提前谢谢 顺便说一句,API也帮不了我在后台执行多个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
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函数,这可能不是您想要做的事情。您需要更具体地告诉我,告诉我们您正在尝试做什么,显示一些代码,以便我们可以帮助您。它可以去任何地方,请参阅。很可能您希望容纳您的应用程序逻辑。我对问题进行了编辑,以使其更加清晰和准确<代码>由于内容太广泛而搁置我希望大家都清楚?