从python脚本启动NGINX

从python脚本启动NGINX,python,nginx,subprocess,Python,Nginx,Subprocess,出于测试目的,我需要经常从python脚本启动/停止nginx 当我这样做的时候 from subprocess import Popen process = Popen(['/usr/sbin/nginx', '-c', '/etc/nginx/nginx.conf']) print process.pid # prints 21621 因此,process.pid等于某些pid 然而,当我查看ps ax | grep nginx输出时,pid是僵尸,然后消失。但是,有一个nginx主

出于测试目的,我需要经常从python脚本启动/停止nginx

当我这样做的时候

from subprocess import Popen
process = Popen(['/usr/sbin/nginx', '-c', '/etc/nginx/nginx.conf'])
print process.pid    # prints 21621
因此,
process.pid
等于某些pid

然而,当我查看
ps ax | grep nginx
输出时,pid是僵尸,然后消失。但是,有一个nginx主进程的pid比原始pid大1

21621 pts/0 Z+0:00[nginx]
21622 ?        ss0:00nginx:masterprocess/usr/sbin/nginx-c/etc/nginx/nginx.conf
21623 ?        S 0:00 nginx:工作进程
21624 ?        S 0:00 nginx:工作进程

从python脚本启动nginx有什么特别的魔力吗?

您可以使用
setsid
。使用此代码

process = Popen(['setsid', '/usr/sbin/nginx', '-c', '/etc/nginx/nginx.conf'])

mansetsid
了解更多信息

如果您的conf文件上有
守护进程
,那么它将在后台启动一个单独的进程。您可能希望关闭
守护进程
,这样您就可以得到NGINX进程的实际PID,因为您自己在后台工作。@Joe,这里没有
守护进程
。但是,有一个
worker\u进程自动设置。这和它有什么关系吗?结果几乎一样:
22542?Zs 0:00[nginx]
如何从python创建
systemd
服务和
start
stop
它?systemd有一些特性使我无法使用它,比如它不能及时停止nginx,因为它有很多进程在运行。在某些负载模式下,它还可以进行深度交换
process = Popen(['setsid', '/usr/sbin/nginx', '-c', '/etc/nginx/nginx.conf'])