更改Laravel文件后,Supervisord进程是否需要重新启动?

时间:2015-05-18 15:17:08

标签: php laravel queue

我正在使用Supervisord来监控Laravel 4.2中的队列。这是我的Supervisord配置文件:

[program:webhooks]
command=php artisan queue:work --daemon --queue=webhooks --tries=3 --sleep=5
directory=/var/www/html/app
stdout_logfile=/var/www/html/app/app/storage/logs/webhooks_supervisord.log
redirect_stderr=true
autostart=true
autorestart=true

正如我在Laravel文档中看到的那样:

  

守护程序队列工作程序在处理之前不会重新启动框架   每个工作。

据我所知,这意味着如果我对框架中的某个文件进行了更改,那么该更改将不会反映在处理队列的守护程序中。例如,如果我的某个文件显示echo 1;并且我更改为echo 2;,则队列正在使用的框架版本仍将显示echo 1,直到我重新启动队列。要让这些新更改生效,我需要运行:

sudo supervisorctl
supervisor> stop webhooks
supervisor> start webhooks

我是否认为这是必需的?或者是否有另一种方法来处理这个问题,以便在不重新启动队列的情况下获取文件的新更改?

3 个答案:

答案 0 :(得分:5)

您不需要!只需执行以下操作,主管就会自动使用新代码重新启动。

$> CD /your/project/folder
$> php artisan queue:restart

原因是当您在配置中设置autorestart=true时,artisan命令将停止队列,而主管将再次强制重新启动。

要确认,只需执行以下操作,然后在输出中查看uptime

$> sudo supervisorctl status

-

如果您对受监控程序的配置进行了更改,则还可以执行以下操作:

$> sudo supervisorctl update

这将重新加载配置,根据需要添加/删除,并将重新启动受影响的主管programs

答案 1 :(得分:2)

由于守护程序队列工作程序只在必须重新启动文件之前才加载文件,然后才能获取任何代码更改。 Here是一个很好的例子,说明一旦项目太大而无法手动重启每个工作人员,如何管理多个相关的队列工作者。

或者,您可以通过php artisan queue:listen使用queue listener。由于整个框架在每个作业完成后从头开始引导,因此该选项会显着增加CPU负载。

答案 2 :(得分:0)

我也有这个问题。由于某种原因,运行 $ php artisan queue:listen$ php artisan queue:work总是导致队列在作业进行到一半时随机停止,即使它们没有失败。我设置了Supervisor,但是每次进行更改时,都会出现运行过时版本代码库的队列问题。

如果您使用Sublime Text作为编辑器,则可以在每次在Laravel项目中进行编辑时添加一个挂钩以重新启动Supervisor。转到“项目”>“编辑项目”。

{
"folders":
[
    {
        "path": "."
    },
    {
        "path": "app/Http/Controllers"
    },
    {
        "path": "resources/views"
    },
    {
        "path": "database/migrations"
    }
],
"on_pre_save_language": 
[
    {
        "command": "supervisorctl restart webhooks"
    }
]

}

到目前为止,一切都很好。如果出现问题,我将更新我的答案。