用 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 重新读取其配置文件,检查它并应用新配置。
我在满足条件时使用 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 来让任何其他有同样困惑的读者明白这一点
我正在寻找重新加载,而不是重新启动,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 重新读取其配置文件,检查它并应用新配置。
我在满足条件时使用 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 来让任何其他有同样困惑的读者明白这一点