【发布时间】:2015-10-01 19:51:27
【问题描述】:
我正在尝试使用生成各种子进程的大型 python 程序设置 daemontools,但我遇到了子进程未正确生成的问题。当通过 daemontools 启动时,子进程只是显示为僵尸进程。
我提供了一个简化的例子来证明这一点。
/服务/测试/运行:
#!/bin/sh
cd /script_directory/
exec envdir /service/test/env /usr/bin/python3 test_subprocess.py
/script_directory/test_subprocess.py
import subprocess
from time import sleep
subprocess.Popen("xterm")
while True:
sleep(1)
test_subprocess.py 只是启动一个 GUI 终端并保持活动状态,所以我可以查看它是否仍在 top/htop 中运行。 如果我以 root 或非 root 用户身份运行脚本,脚本将正确执行并显示窗口。当通过 daemontools/supervise 运行时,xterm 被僵尸化并且不显示任何窗口。 按照here 的描述设置 env/DISPLAY 和 env/XAUTHORITY 变量似乎对我不起作用。
经过进一步调查,即使子进程不使用 GUI,它也会被僵尸化。例如,如果 subprocess.py 中的子进程是“top” - 它不会运行。
我已经在不产生子进程的各种其他项目上成功使用了 daemontools,所以我认为问题不在于这里的基本设置。
daemontools 能否与生成其他进程的脚本一起使用?
如果没有,还有哪些其他推荐的工具来守护复杂的 Python 应用程序?
【问题讨论】:
-
我的猜测是您缺少 PATH 等环境变量。主管见supervisord.org/subprocess.html#subprocess-environment
-
或者,您可以完全指定
xterm的路径 -
你试过supervisord.org了吗?
-
我会尝试切换到 supervisord 并报告
-
我刚刚切换到 supervisord,它能够启动我的 python 脚本和从 python 启动的子进程。似乎更容易设置和开始工作!
标签: python linux subprocess daemon