首页 > 解决方案 > Django wsgi subprocess.Popen 进程在 gunicorn 重启时死亡

问题描述

我目前正在从事由 Nginx+gunicorn 服务的 django 项目。该应用程序的功能之一是在后台运行和停止机器人。我已经使用subprocesspython 模块实现了它,但问题是我开始的过程subprocess.Popen变成了 gunicorn 的子进程并且到目前为止我重新启动了 gunicorn。代码如下所示:

subprocess.Popen(
    ['runbot'],
    close_fds=True,
    start_new_session=True,
    stdout=subprocess.DEVNULL,
    stderr=subprocess.DEVNULL,
)

其中“runbot”是机器人的可执行文件,它启动并运行,直到收到 SIGTERM 信号。选项在这里close_fdsstart_new_session没有帮助,并且该过程仍然作为父 gunicorn 进程的子进程开始。

有趣的观察 - 这似乎是一个与 wsgi 相关的问题,因为当我使用内置的 django dev web-server 启动项目时,一切都按预期工作。

如何使用subprocess.Popenwith gunicorn 并在 linux 系统上完全分离地运行该进程?

我考虑的其他选择是

从 django 运行守护进程的最佳实践是什么?这个想法是启动、停止和检查这些进程的状态。

标签: pythondjangosubprocessgunicornwsgi

解决方案


推荐阅读