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服务呢?

阅读 3.5k
3 个回答

通过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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题