跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • supervisor 守护进程热更新的时候大家怎么处理的
未分類
4 2 月 2021

supervisor 守护进程热更新的时候大家怎么处理的

supervisor 守护进程热更新的时候大家怎么处理的

資深大佬 : awanganddong 2

现公司队列是用 supervisor 守护的,

修改队列里边的代码

如果用 supervisorctl restart all

这样就相当于重启队列

如果此时有执行的任务,就直接放弃了。。

大家遇到这种情况怎么处理

大佬有話說 (15)

  • 資深大佬 : Jeyfang

    队列如果遇到退出信号,等待直到将当前正在处理的消息处理完之后再退出

  • 資深大佬 : ruanimal

    https://stackoverflow.com/questions/13632399/sending-general-signal-to-child-process-of-supervisord#answer-13645290

  • 資深大佬 : AlanLeung2018

    think-queue+supervisor,平滑重启的,任务不受影响

  • 主 資深大佬 : awanganddong

    @Jeyfang 刚才我试验了下。

    在 laravel 队列执行过程中 supervisorctl restart test

    然后出现了两个 testJob.time() 的文件,这也就说明任务出现重复执行的情况。

    retry_after=86400

    “`
    $i = 10000000;
    while ($i) {
    if ($i == 10000000) {
    LogInfo(‘testJob’ . time(), $i);
    } else {
    LogInfo(‘testJob’, $i);
    }
    $i–;
    }

    “`

  • 主 資深大佬 : awanganddong

    @ruanimal 你的思路是直接用 supervisor 信号,这个我可以研究下

  • 資深大佬 : keepeye

    supervisord 会向你的进程发送 SIGTERM 信号,自己捕获一下,做一下扫尾工作然后优雅退出即可

  • 資深大佬 : SjwNo1

    我一般半夜处理 (逃

  • 主 資深大佬 : awanganddong

    @keepeye 用信号大概知道,但是具体到落地就是另外一回事了。

  • 資深大佬 : keepeye

    @awanganddong 因为不知道你具体是什么程序,只能参照 php 文档了

    https://www.php.net/manual/en/function.pcntl-signal.php

    示例还是很清晰的,关键在于理解 declare(ticks = 1);

  • 主 資深大佬 : awanganddong

    项目用的是 laravel 框架。

    然后守护进程直接用 supervisor

    你给我的方案在于手动去实现一个守护进程,这样的话,我用 supervisor 就没意义了。

    难道我想歪了吗

  • 主 資深大佬 : awanganddong

    我刚开了下 laravel 文档

    重启不依托于 supervisorctl

    下边这条指令可以

    php artisan queue:restart

  • 資深大佬 : keepeye

    @awanganddong 我也翻了一下 laravel 文档,以及 github 上的一条 issue,我认为 laravel(5.6+)是能够正确处理 SIGTERM 信号的。
    文档里有关于配置 supervisor 的说明:

    You should ensure that the value of stopwaitsecs is greater than the number of seconds consumed by your longest running job. Otherwise, Supervisor may kill the job before it is finished processing.

    意思你配置 supervisor 的 stopwaitsecs 参数必须足够大,保证 worker 能完成正在处理的任务

  • 資深大佬 : Jeyfang

    @awanganddong 看看你测试的脚本 LogInfo(‘testJob’, $i)第一次到底执行到了哪里就结束了,结合上老哥说的 stopwaitsecs,是不是被中途中断然后重启又运行该任务

  • 主 資深大佬 : awanganddong

    那就可以确定了 是 stopwaitsecs 这个值设置的时间过短的问题。

    谢谢各位了

  • 資深大佬 : owenzhang24

    https://my.oschina.net/owenzhang24/blog/3186720

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具