【问题标题】:Using daemontools with a Python script that spawns subprocesses将 daemontools 与生成子进程的 Python 脚本一起使用
【发布时间】: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


【解决方案1】:

兄弟,我不明白你去做什么。但试试这个程序:

import subprocess
p = subprocess.Popen(
['xterm', '-hold'], stdin=subprocess.PIPE)
p.communicate()

如果要给出一些参数,请使用 -e 并键入命令,如果有其他问题请告诉我。谢谢

【讨论】:

  • 不是我的 dv,但如果你不明白 OP 试图做什么,你回答这个问题是为了什么?
  • 对不起,这与这里的问题无关。已通过从 daemontools 切换到 supervisord 解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2016-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-15
相关资源
最近更新 更多