我花了一段时间才发现,但从最近的一些更新开始,我无法在任何 Ubuntu 12.04 或 Ubuntu 14.04 服务器上停止 Nginx。
我 奔跑sudo service nginx stop
, 然后 我 获得nginx start/running, process 16178
.
我再试sudo service nginx stop
一次,然后我得到了nginx start/running, process 16206
。
注意进程号是如何变化的。
我/var/log/syslog
明白为什么:
Jun 11 11:57:51 kernel: [2318556.994508] init: nginx main process ended, respawning
。
每次运行 时,Nginx 都会重新启动sudo service nginx stop
。它永远不会完全停止。
我尝试更新 Ubuntu,重新启动,并在本地测试映像上重新安装服务器(我使用 Puppet)。但没有任何效果。我还尝试搜索与此相关的错误,但没有结果。
有人知道我该如何解决这个问题吗?我希望能够运行sudo service nginx stop
并停止所有 nginx 进程。
答案1
看来你的 nginx 服务器是由 upstart 进程处理的。
查看 /etc/init 文件夹,检查是否没有处理 nginx 的文件。
grep -r nginx /etc/init
然后编辑此文件,并删除respawn
配置文件中的选项。
答案2
您可以使用以下方式停止 nginx 进程sudo nginx -s quit
您可以看到/etc/init/nginx
答案3
我遇到了同样的问题,当我想用临时网络服务器更新我的 letsencrypt 证书时certbot
:每次我都用以下方法停止 nginx:
service stop nginx
几秒钟后,它自动重启,因此当它提供我的域名 certbot 的证明时,端口 443 已经被重新生成的 nginx 使用。
我真的很急着要解决这个问题,所以我开始了一个非常肮脏的解决方法,但它确实有效:
while true; do service nginx stop; sleep 2; done
现在我可以刷新我的证书并在稍后找到如何以更正确的方式永久停止 nginx ;)