在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(僵尸)进程。目前暂时只能用这种方法。