Python中supervisor启动时报`ERROR (abnormal termination)`错误,但实际启动成功的原因是什么?

如题目说指,使用 supervisor 管理应用时,进行项目启动的或者重启的时候,偶尔会报报ERROR (abnormal termination)错误,然后实际上启动成功。这个有什么办法么?


Python中supervisor启动时报`ERROR (abnormal termination)`错误,但实际启动成功的原因是什么?
1 回复

这个报错通常是因为supervisor监控的进程在启动后立即退出,但退出状态码不是0(比如进程变成了守护进程或快速完成了任务)。supervisor会认为这是异常终止,但实际上你的程序可能已经在后台正常运行了。

最常见的情况是你的程序自己fork了守护进程然后主进程退出。supervisor看到主进程退出就报错,但其实子进程还在跑。

检查方法:

# 一个典型的会导致这个问题的例子
import time
import os
import sys

def main():
    # 如果是守护进程模式
    if os.fork():
        sys.exit(0)  # 父进程退出
    
    # 子进程继续运行(实际的工作进程)
    time.sleep(10)
    print("实际工作完成")

if __name__ == '__main__':
    main()

解决方案:

  1. 在supervisor配置中设置stopasgroup=truekillasgroup=true
  2. 或者修改你的程序,不要立即退出父进程
  3. 使用startsecs参数给supervisor更长的等待时间

建议直接改supervisor配置试试。

回到顶部