用 monit 重新加载 nginx

reload nginx with monit

我正在寻找重新加载,而不是重新启动,nginx 与 monit。文档说有效的服务方法是启动、停止和重新启动,但不是重新加载。

有没有人有关于如何重新加载 nginx 而不是重新启动它的解决方法?

编辑 - 我应该指出,我仍然需要重新启动 nginx 的能力,但在某些情况下,我还需要仅重新加载 nginx。

例如,如果 nginx 出现故障,则需要重新启动,但如果正常运行时间 > 3 天(例如),则应重新加载。

我正在努力实现这一目标:https://mmonit.com/monit/documentation/monit.html#UPTIME-TESTING

...但随着 nginx 的重新加载,而不是重新启动。

谢谢。

您可以传递应该完成工作的重新加载信号:

nginx -s reload

"Use the docs. Luke!"

根据文档,发送 HUP 信号将导致 nginx 重新读取其配置文件,检查它并应用新配置。

详情见:http://nginx.org/en/docs/control.html#reconfiguration

我在满足条件时使用 exec 命令解决了这个问题。例如:

check system localhost
  if memory > 95%
  for 4 cycles
  then exec "/etc/init.d/nginx reload"

我发现 nginx 内存问题可以在短期内通过重新加载而不是重新启动来解决。

这是一个可以实现您想要的效果的配置:

check process nginx with pidfile /usr/local/var/run/nginx.pid
  start program = "/usr/local/bin/nginx -s start"
  stop program = "/usr/local/bin/nginx -s stop"
  if uptime > 3 days then exec "/usr/local/bin/nginx -s reload"

我已经在我的配置中试过了。我看到的唯一问题是 Monit 假设您在像这样检查正常运行时间时定义了错误条件。 nginx -s reload 命令,正如我在我的机器上看到的那样,不会将进程的正常运行时间重置为 0。由于 Monit 认为正常运行时间 > 3 天是错误情况,您可以通过您提供的命令来纠正配置,但该命令不会将正常运行时间重置为少于 3 天,Monit 将报告 Uptime failed 作为进程的状态,您将在日志中看到:

error    : 'nginx' uptime test failed for /usr/local/var/run/nginx.pid -- current uptime is 792808 seconds

实际上你会看到数百个这样的(我的配置每 30 秒有一个 Monit 运行,所以我每 30 秒得到一个)。

一个问题:我不确定reload在很长一段时间后(比如 3 天)对 nginx 的影响 - 对 nginx 这样做有帮助吗?如果你有一个 link 的信息来说明为什么这对 nginx 有好处,那可能会帮助其他读者通过搜索进入这个页面。也许您接受了您所做的回答,因为您发现只有在出现问题时才有意义,例如内存使用率过高?

(旧 post,我知道,但我是通过 Google 到达这里的,看到接受的答案不完整,也没有完全理解 OP 的意图)。

编辑:啊,我看到你接受了你自己的回答。我的错。所以看起来您实际上确实看到按照您最初的要求做是没有意义的,而是选择了内存检查!我会留下我的 post 来让任何其他有同样困惑的读者明白这一点