Php 更改Laravel文件后是否需要重新启动Supervisord进程?
我正在使用Supervisord监视Laravel 4.2中的队列。这是我的Supervisord配置文件:Php 更改Laravel文件后是否需要重新启动Supervisord进程?,php,laravel,queue,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.
[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
这是必需的,对吗?或者是否有其他方法来处理此问题,以便在不重新启动队列的情况下拾取对文件的新更改?因为在拾取任何代码更改之前,只有在必须重新启动文件时,守护进程队列工作程序才会加载该文件。这是一个很好的例子,说明了当项目变得太大而无法手动重新启动每个工作人员时,如何管理多个相关的工作人员队列
或者,您可以使用viaphp-artisan-queue:listen
。这个选项会显著增加CPU负载,因为在每次作业之后,整个框架都是从零开始引导的 我也有这个问题。出于某种原因,我跑了
$php artisan queue:listen
或$php artisan queue:work
总是导致队列在作业中途随机停止,即使作业没有失败。我设置了Supervisor,但之后每当我进行更改时,就会出现队列运行过时版本的代码库的问题
如果您使用升华文本作为编辑器,则可以添加一个钩子,以便在每次在Laravel项目中进行编辑时重新启动Supervisor。转到项目>编辑项目
{
"folders":
[
{
"path": "."
},
{
"path": "app/Http/Controllers"
},
{
"path": "resources/views"
},
{
"path": "database/migrations"
}
],
"on_pre_save_language":
[
{
"command": "supervisorctl restart webhooks"
}
]
}
到目前为止还不错。如果出现问题,我会更新我的答案。你不需要!只需执行以下操作,主管就会自动重新启动,并使用新代码
$> CD /your/project/folder
$> php artisan queue:restart
原因是artisan命令将停止队列,而supervisor将强制重新启动,因为您已在配置中设置了autorestart=true
要确认,只需执行以下操作并查看输出中的正常运行时间
:
$> sudo supervisorctl status
--
此外,如果您对supervisord程序的配置进行了更改,则可以执行以下操作:
$> sudo supervisorctl update
这将重新加载配置,根据需要添加/删除,并将重新启动受影响的监控程序
程序这是正确答案。文件参考: