从python代码内部调用upstart作业会导致进程冻结
我有一种情况,我想从我的python代码内部开始一项新的工作。要开始的作业本身是用pythonth编写的,在这里不重要 下面是我的upstart作业config/etc/init/test.conf的样子从python代码内部调用upstart作业会导致进程冻结,python,subprocess,multiprocessing,upstart,Python,Subprocess,Multiprocessing,Upstart,我有一种情况,我想从我的python代码内部开始一项新的工作。要开始的作业本身是用pythonth编写的,在这里不重要 下面是我的upstart作业config/etc/init/test.conf的样子 normal exit 0 respawn respawn limit 5 300 instance $db chdir /home/talha/conn/test/ script exec /usr/bin/python test.py $db end script 我调用pyth
normal exit 0
respawn
respawn limit 5 300
instance $db
chdir /home/talha/conn/test/
script
exec /usr/bin/python test.py $db
end script
我调用python代码来启动这个作业,它位于Django项目中,该项目通过Apache中的wsgi_mod运行。由于apache在www数据下运行,我需要使用sudo来启动upstart。我已经授予apache运行start/stop的权限
我的调用python代码如下所示
cmd = "sudo start test db="+ db_name
p = subprocess.Popen(shlex.split(cmd), stderr=subprocess.STDOUT)
现在服务启动了。这是ps aux的输出
实际服务被终止,但启动/停止进程被卡住
4 S root 9063 1 0 80 0 - 4751 poll_s 23:09 ?00:00:00 sudo start
test db=testdb
4 S root 9267 1 0 80 0 - 4751 poll_s 23:11 ?00:00:00 sudo stop
test db=testdb
任何想法/帮助都将不胜感激。您是否尝试过关闭\u fds=True、stdin=DEVNULL、stdout=DEVNULL、stderr=stdout、preexec\u fn=os.setsid并使用rc=call。。我更新了描述,而不是Popen?@J.F.Sebastian。我错过了一个同样被创建的僵尸进程。这可能是因为start已经死了,但是它的父sudo还活着,所以如果sudo没有为启动进程调用waitpid或者以其他方式获得它;它仍然是僵尸。这似乎与冻结无关。你试过用我提供的参数打电话吗?还可以尝试在apache外部调用和/或使用其他用户。使用subprocess.check_调用获取回溯。
cmd = "sudo stop test db="+ db_name
p = subprocess.Popen(shlex.split(cmd), stderr=subprocess.STDOUT)
4 S root 9063 1 0 80 0 - 4751 poll_s 23:09 ?00:00:00 sudo start
test db=testdb
4 S root 9267 1 0 80 0 - 4751 poll_s 23:11 ?00:00:00 sudo stop
test db=testdb