laravel队列应如何正确设置为主管生产?

时间:2015-04-02 20:25:07

标签: php laravel supervisord

我尝试设置队列用于日志存储,电子邮件发送和其他任务。

我决定使用 beanstalkd 和主管来控制作业队列的执行。我用作曲家安装了pda/pheanstalk ~2.0,在app/config/queue.php做了正确的设置,编写了我的Queue类并尝试执行任务。

这是一个例子,它是日志中的日志:

Auth::attempt(array(
                        'email' => $email,
                        'password' => $password
                        ));

if (Auth::check()) {
$debounce = Carbon::now()->addSeconds(10);
Queue::later($debounce, 'SaveAcessLog', array('user' =>  Auth::id(), 'ip' => Request::getClientIp()));
}

所以对于主管我跟着this tutorial。安装完成后,我按照每一步操作,确保laravel_queue.conf run_queue.sh文件可执行。

问题在于我无法执行任何任务。当我测试sudo supervisorctl时,我获得了:

laravel_queue                    FATAL      Exited too quickly (process log may have details)

/var/log/supervisor/supervisord.log访问supervisord日志文件时显示:

2015-04-02 20:16:57,251 INFO supervisord started with pid 1269
2015-04-02 20:16:58,254 INFO spawned: 'laravel_queue' with pid 1316
2015-04-02 20:16:58,277 INFO exited: laravel_queue (exit status 127; not expected)
2015-04-02 20:16:59,279 INFO spawned: 'laravel_queue' with pid 1525
2015-04-02 20:16:59,287 INFO exited: laravel_queue (exit status 127; not expected)
2015-04-02 20:17:01,294 INFO spawned: 'laravel_queue' with pid 1753
2015-04-02 20:17:01,303 INFO exited: laravel_queue (exit status 127; not expected)
2015-04-02 20:17:04,658 INFO spawned: 'laravel_queue' with pid 1808
2015-04-02 20:17:04,668 INFO exited: laravel_queue (exit status 127; not expected)
2015-04-02 20:17:05,669 INFO gave up: laravel_queue entered FATAL state, too many start retries too quickly

所以,如果我尝试php artisan queue:work,任务就会被执行!我的supervisord设置错过了什么?

注意

我可以使用与监督不同的东西,以防它变得更简单或更有效。

2 个答案:

答案 0 :(得分:3)

Check if supervisor startsecs=0 helps. Supervisor docs

My config:

[program:myqueue]
#command=php artisan queue:work --daemon --sleep=10 --verbose
command=php artisan queue:work --daemon --sleep=90 --tries=1 -vvv
## --timeout=0 --tries=0
#user=user
directory=/usr/share/nginx/laravel
stdout_logfile=/usr/share/nginx/laravel/app/storage/logs/myqueue_supervisord.log
redirect_stderr=true
autostart=true
startsecs=0
#autorestart=false
#startretries=0
#exitcodes=1

答案 1 :(得分:1)

我知道这是一个老问题,但我在我的超级用户配置中使用artisan queue:listen运气更好,这样就不会继续启动和停止进程,但如果由于某种原因停止运行,应该重启

<强>更新

似乎这不是最佳解决方案,我发现它将在大多数时间运行队列。但是,如果有很长一段时间没有工作要处理,除非主管被告知再次启动工人,否则新工作似乎不会得到处理。

更新

我现在有类似以下的配置:

[program:worker]
process_name=%(program_name)s_%(process_num)02d
command=php artisan queue:work --sleep=3 --tries=3 --daemon
autostart=true
autorestart=true
numprocs=8
redirect_stderr=true
startretries=10
stdout_logfile=/dir/logs/worker.log

它似乎运作良好,并且没有长时间摔倒。