Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 更改Laravel文件后是否需要重新启动Supervisord进程?_Php_Laravel_Queue - Fatal编程技术网

Php 更改Laravel文件后是否需要重新启动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.

我正在使用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

这是必需的,对吗?或者是否有其他方法来处理此问题,以便在不重新启动队列的情况下拾取对文件的新更改?

因为在拾取任何代码更改之前,只有在必须重新启动文件时,守护进程队列工作程序才会加载该文件。这是一个很好的例子,说明了当项目变得太大而无法手动重新启动每个工作人员时,如何管理多个相关的工作人员队列


或者,您可以使用via
php-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

这将重新加载配置,根据需要添加/删除,并将重新启动受影响的监控程序
程序

这是正确答案。文件参考: