Nginx -s quit 在 1.8 升级后没有任何作用,我该如何调试和/或发现问题?

Nginx -s quit 在 1.8 升级后没有任何作用,我该如何调试和/或发现问题?

不幸的是,这个问题的前提很模糊,但我无法指出更具体的问题。我将一台机器从 nginx 1.6.3 升级到 1.8,现在发出一个nginx -s quit命令实际上没有任何作用。该命令没有输出,access_log 和 error_log 文件没有显示任何异常,即使使用调试级别/var/log/nginx/error.log在所有 vhost 中启用。除了“信号进程已启动”通知外,没有其他内容。pgrep nginx显示进程停留在那里,就像什么都没发生一样。

我知道退出信号不一定会立即停止 nginx,因为它应该退出优雅地但这里的问题是,即使机器装有防火墙、隔离且不处理任何请求,nginx -s quit它仍然什么也不做。在与 1.6.3 完全相同的条件下,进程会立即停止。

我完全不知道该如何调试这个问题并找到根本原因,但显然有些地方不对劲。任何能为我指明正确方向的帮助都将不胜感激。

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

  1. apt-get update/upgrade 将机器上的 nginx 1.6.3 升级到 1.8(当提示安装新的 /etc/nginx/nginx.conf 时)
  2. sudo nginx -s quit首次按预期工作
  3. sudo service nginx start使 nginx 恢复预期
  4. sudo nginx -s quit第二次不再执行任何操作,即使重新启动后仍会保持原样

我们在虚拟机中测试了多次,结果一致。也许这是 1.8 中的一个错误?

答案1

由于某些我们尚未找到的原因,在我们的环境中,nginx 创建了两个 pid 文件:/run/nginx.pid/var/run/nginx.pid。无论 nginx 版本如何,这种情况似乎都会发生,因此似乎它本身并不是 nginx 错误。

运行nginx -s quit不会像应该的那样终止和删除 pid,但service nginx stop确实会。因此,为了在最新的 nginx 版本中正常重启,我们必须同时运行:

  1. sudo nginx -s quit
  2. sudo service nginx stop(大约一分钟后,即可正常退出)
  3. sudo service nginx start

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

相关内容