【问题标题】:Does Supervisord process need restart after changes to Laravel file?更改 Laravel 文件后是否需要重启 Supervisord 进程?
【发布时间】:2015-07-30 04:17:53
【问题描述】:

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

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

【问题讨论】:

    标签: php laravel queue


    【解决方案1】:

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

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

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

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

    $> sudo supervisorctl status
    

    --

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

    $> sudo supervisorctl update
    

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

    【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      我也有这个问题。出于某种原因,运行 $ 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"
              }
          ]
      }
      

      到目前为止一切顺利。如果出现问题,我会更新我的答案。

      【讨论】:

        猜你喜欢
        • 2012-10-05
        • 1970-01-01
        • 1970-01-01
        • 2016-06-04
        • 1970-01-01
        • 2016-06-12
        • 1970-01-01
        • 1970-01-01
        • 2014-08-29
        相关资源
        最近更新 更多