python subprocess 启动nginx,重启python时提示端口占用
在centos服务器上运行了python脚本,用于启动、重载和关闭nginx服务,python脚本使用了Flask进行监听(端口是5002),并且使用supervisor进行脚本管理。
下面是脚本启动nginx的方法:
subprocess.call('/var/nginx/sbin/nginx -c /var/nginx/conf/nginx.conf', shell=True)
现在的问题是,如果脚本做了调整,需要进行脚本重载,即使用 supervisorctl restart *****
,就会报错,说端口已经被占用,使用 netstat -anp |grep 5002
发现是被nginx占用了, 关闭nginx之后,可以重载成功。
所以,为了避免类似问题,应该使用什么方法从python脚本中启动nginx服务呢?
回答:
通过subprocess.Popen执行方法,配置close_fds=True可以解决这个端口占用的问题,不过会产生一个defunct(僵尸)进程。目前暂时只能用这种方法。
subprocess.Popen('/var/nginx/sbin/nginx -c /var/nginx/conf/nginx.conf', close_fds=True, shell=True)
回答:
你不应该先 kill 掉之前的进程,然后再重启么……
回答:
python应该直接调用supervisor
由supervisor去控制nginx reload和start
以上是 python subprocess 启动nginx,重启python时提示端口占用 的全部内容, 来源链接: utcz.com/p/938267.html