You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何supervisord事件监听器仅捕获自身事件?

问题分析与解决方案

你的问题核心出在事件监听器的协议响应格式错误,导致Supervisor无法正确识别监听器的ACK响应,进而反复重启监听器,所以你只能看到监听器自身的启动事件,而无法捕获scheduler的崩溃事件。

具体问题点

看你的监听器代码最后一行:

write_stdout('RESULT 2\nOK')

Supervisor的事件监听器协议要求,每个发送给stdout的消息必须以换行符(\n)结尾。这里的OK后面没有添加换行,Supervisor无法正确解析这个响应,会判定监听器异常,随即重启它——这就是你日志里反复出现PROCESS_STATE_STARTING len:70 processname:mylistener的原因。

修复步骤

修改监听器代码的最后一行,给OK加上换行:

write_stdout('RESULT 2\nOK\n')

额外验证

你的supervisor.cfg配置本身没有问题:

  • 事件列表events=PROCESS_STATE_STOPPED,PROCESS_STATE_EXITED,...已经覆盖了你需要捕获的进程状态事件
  • scheduler的配置也正确(会自动重启,符合你说的“每分钟崩溃一次”的场景)

修复代码后,重启Supervisor:

sudo supervisorctl reload

之后就能正常捕获scheduler的崩溃(PROCESS_STATE_EXITED/PROCESS_STATE_STOPPED)事件了。

调试小技巧

如果之后还有问题,可以查看Supervisor的主日志(/var/log/supervisor/supervisord.log),里面会记录监听器的异常信息,帮助你更快定位问题。

内容的提问来源于stack exchange,提问作者Dmytro T

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:14:08