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

fly*_*123 7 php queue laravel

我正在使用 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

sudo supervisorctl
supervisor> stop webhooks
supervisor> start webhooks
Run Code Online (Sandbox Code Playgroud)

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

Rah*_*san 11

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

$> CD /your/project/folder
$> php artisan queue:restart
Run Code Online (Sandbox Code Playgroud)

原因是 artisan 命令将停止队列,而 supervisor 将按照您autorestart=true在配置中的设置再次强制重启。

要确认,只需执行以下操作并查看uptime输出:

$> sudo supervisorctl status
Run Code Online (Sandbox Code Playgroud)

——

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

$> sudo supervisorctl update
Run Code Online (Sandbox Code Playgroud)

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


nCr*_*zed 2

由于守护进程队列工作程序仅在重新启动一次后才加载文件,然后才会拾取任何代码更改。是一个很好的例子,说明当项目太大而无法手动重新启动每个工作人员时,如何管理多个相关的队列工作人员。

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