不幸的是,这个问题的前提是模糊的,但我无法确定一个更具体的问题。我将一台机器从nginx1.6.3升级到1.8,现在发布一个nginx -s quit实际上什么也不做。该命令不提供任何输出,access_log和error_log文件显示没有异常,即使在所有vhost中启用了调试级。在/var/log/nginx/error.log中,除了“信号处理启动”通知之外,没有别的东西。pgrep nginx显示,流程停留在那里,好像什么都没发生一样。
我知道退出信号并不一定立即停止nginx,因为它应该优雅地退出,但是这里的问题是,即使机器是防火墙、隔离的,并且没有处理任何请求,nginx -s quit仍然什么也不做。在与1.6.3完全相同的条件下,过程立即停止。
我完全不知道如何调试这个问题,并找到根本原因,但显然有些地方不对劲。如果能帮助我找到正确的方向,我将不胜感激。
编辑:我们看到的行为如下,一步一步:
sudo nginx -s quit第一次按预期工作sudo service nginx start按预期将nginx带回来sudo nginx -s quit第二次不再做任何事情,即使在重新启动之后也将保持原样。我们在VM中对此进行了多次测试,结果是一致的。也许是1.8里的窃听器?
发布于 2016-07-09 17:18:20
由于某些原因,我们还没有找到,因此nginx在我们的环境中创建了两个pid文件:/run/nginx.pid和/var/run/nginx.pid。不管nginx版本如何,这似乎都会发生,因此它本身似乎不是一个nginx错误。
运行nginx -s quit不会像它应该的那样杀死和删除pids,但是service nginx stop会这样做。因此,为了在最新的nginx版本中进行优雅的重新启动,我们必须同时运行这两个版本:
sudo nginx -s quitsudo service nginx stop (花一分钟左右的时间为优雅的退出留出时间)sudo service nginx start然后,只要通过服务命令停止nginx,确保quit不会滞后,后续的信号就会正常工作。
https://serverfault.com/questions/691196
复制相似问题