从python代码中调用upstart作业会导致进程冻结

时间:2013-11-21 08:34:09

标签: python subprocess multiprocessing upstart

我有一种情况,我想从我的python代码中启动一个upstart作业。要启动的工作本身是用python编写的(这不应该在这里)

以下是我的upstart作业配置(/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

我调用python代码来启动这项工作位于一个Django项目中,该项目被挂钩以通过Apache中的wsgi_mod运行。由于apache在www-data下运行,我需要使用sudo来启动upstart。(我已经授予apache运行start / stop的权限。)

我的调用python代码看起来像这样

cmd = "sudo start test db="+ db_name
p = subprocess.Popen(shlex.split(cmd), stderr=subprocess.STDOUT)

现在服务已启动。以下是ps aux

的输出
S root      9063  8929  0  80   0 -  4751 poll_s 23:09 ?00:00:00 sudo start    
test db=testdb
4 Z root      9064  9063  0  80   0 -     0 exit   00:00:00 [start]<defunct>
0 S root      9066  1  0  80   0 -  9351 poll_s 23:09 ?00:00:00 python 
test.py testdb

请注意,pid sudo start test db=testdb正在运行的流程9063。这就是问题。它永远不会退出。在此进程上运行strace表示它已卡在SELECT的某个位置...还有一个僵尸进程。实际服务python test.py运行正常但是..

同样当我尝试通过代码停止服务时

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

任何想法/帮助将不胜感激。

0 个答案:

没有答案