1.8升级后Nginx -s quit什么都不做,我该如何debugging和/或发现问题?

这个问题的前提不幸是模糊的,但我不能指出一个更具体的问题。 我把一台机器从nginx 1.6.3升级到了1.8,现在发布一个nginx -s quit并没有什么意义。 该命令不输出,即使在所有虚拟主机中启用了debugging级别 ,access_log和error_log文件也不会显示任何exception。 /var/log/nginx/error.log除了“信号进程启动”通知之外,也没有任何内容。 pgrep nginx显示进程停留在那里,没有发生任何事情。

我知道退出信号并不一定会立即停止nginx,因为它应该正常退出,但问题是,即使机器被防火墙隔离,并且没有处理任何请求, nginx -s quit仍然不会执行任何操作。 在与1.6.3完全相同的条件下,过程立即停止。

我完全丧失了如何debugging这个问题,并find根本原因,但显然有些不对劲。 任何帮助指出我正确的方向将不胜感激。

编辑:我们看到的行为是以下,一步一步:

  1. apt-get更新/升级nginx 1.6.3到1.8的机器(当提示安装新的/etc/nginx/nginx.conf时)
  2. sudo nginx -s quit第一次sudo nginx -s quit按预期工作
  3. sudo service nginx start将nginx带回原样
  4. sudo nginx -s quit第二次sudo nginx -s quit ,什么都不做了,重启后也会保持原状

我们在VM中多次testing,结果是一致的。 也许这是1.8的错误?

由于某种原因,我们还没有find,在我们的环境nginx创build两个PID文件: /run/nginx.pid/var/run/nginx.pid 。 这似乎发生,无论nginx版本,所以它似乎不是一个nginx错误本身。

运行nginx -s quit不会像应该那样service nginx stop和删除pid,但是service nginx stop 。 所以为了在最新的nginx版本中做一个平稳的重启,我们必须运行两个:

  1. sudo nginx -s quit
  2. sudo service nginx stop (过了一分钟左右,给优雅的退出时间)
  3. sudo service nginx start

然后,只要nginx通过服务命令停止,后续的quit信号就会正常工作,以确保pid不会滞后。