【问题标题】:Why supervisor faild to start the program?为什么主管无法启动程序?
【发布时间】:2018-07-11 11:12:41
【问题描述】:

我正在使用 Redis 处理 laravel 队列作业,并使用主管来管理多个工作人员。
我有不止一个 numprocs 可以完美运行几天,然后即使主管处于 活动状态,主管也会宕机

因为在supervisor中,当supervisord失败超过配置文件中设置的startretries值以启动程序/worker然后程序/worker进入FATAL STATE然后它不会处理任何作业,所以当所有工人都进入这种状态时,主管就倒下了。 然后我们需要手动重启Supervisor才能再次开始处理。

但这不是一个合适的解决方案。
我的问题是为什么主管无法启动,解决方案是什么?
参考主管文档:-http://supervisord.org/subprocess.html
我的配置文件是这样的:-

[program:name]
process_name=%(program_name)s_%(process_num)02d
command=php /path/artisan queue:work --queue=queue1,queue2,queue3,queue4,default --tries=1 --daemon
autostart=true
autorestart=true
startretries=15
numprocs=150
user=root
redirect_stderr=true
stdout_logfile=/path/worker.log
stderr_logfile=/path/workerError.log

更新
我的日志文件看起来像这样

我的标准输出日志文件是这样的

任何帮助将不胜感激。

【问题讨论】:

  • 你能给你看主管日志文件吗?
  • 嗨@Pavel 我用日志文件数据更新了我的问题。看看吧。
  • 嗯,很难的问题,唯一的想法是检查失败的时刻:也许是内存的一些问题,或者其他什么。所以尝试查看其他日志(nginx、php 等)。也可能不是一个好主意,但你可以尝试增加startretries参数。
  • 我们不能只增加startretries 的值,我们需要找出它无法启动workers 的原因。
  • 您需要添加通过PHP进程创建的日志。当前日志仅显示工人 106 产生了一些严重的问题并被关闭。激动人心的日志应该在worker.logworkerError.log。它可能是从 MySQL 中的“太多连接”到完全不同的东西。你也可以看看你的/var/log/daemon.log,因为它会在你的由工人运行的 PHP 进程中包含致命错误。

标签: php laravel-5 queue supervisord


【解决方案1】:

相关的日志条目是:

 exited: laravelw_106 (exit status 0; not expected)
gave up: laravelw_106 entered FATAL state, ntoo many start retries too quickly

laravel 队列工作者在启动后由于某种原因立即停止。 队列工作者应该是长时间运行的。

您需要找出它退出的原因;也许你的工作中有exit()die() 声明。

【讨论】:

  • 感谢您的回复,但在我的工作中我没有任何die()exit(),该工作只有return() 任务完成后的结果。
【解决方案2】:

您的消费者/工人在启动后很快就会死去。消费者应该是一个在无限循环中运行并等待任务/消息的进程。你说任务完成后你有一个return(),也许这是在停止worker。

尝试手动运行worker,然后在队列中生成消息。工人不应在仅完成一项任务后停止。

【讨论】:

  • 嗨@bogdancep,当我手动运行工作程序时,它运行完美,但我只从我的用户定义函数将结果返回给作业处理程序,但我没有从作业处理程序方法返回任何东西。因此,在我的代码中完成一项任务后,我不会停止工作人员。
猜你喜欢
  • 2017-11-29
  • 2022-01-19
  • 1970-01-01
  • 2017-02-04
  • 2023-03-24
  • 1970-01-01
  • 2013-11-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多