用monit重新加载nginx

时间:2015-01-02 10:50:39

标签: nginx monit

我想用monit重新加载,而不是重启,nginx。文档说有效的服务方法是启动,停止和重启,但不重新加载。

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

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

一个例子可能是,如果nginx出现故障,则需要重新启动,但如果它有正常运行时间> 3天(例如)它应该重新加载。

我试图实现这一目标:https://mmonit.com/monit/documentation/monit.html#UPTIME-TESTING

...但是使用nginx重新加载,而不是重新启动。

感谢。

4 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

nginx -s reload

答案 2 :(得分:0)

“使用文档。卢克!”

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

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

答案 3 :(得分:0)

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

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

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

一个问题:我不确定经过很长一段时间后的reload nginx,比如3天,会为它做些什么 - 为nginx这样做是否有帮助?如果您有关于为什么这对nginx有益的信息的链接,这可能有助于其他读者通过搜索到达此页面。也许你接受了你所做的答案,因为你发现只有在出现问题时才会这样做,比如内存使用量很高?

(老帖子,我知道,但是我通过Google来到这里,看到接受的答案是不完整的,也不完全理解OP的意图。)

编辑:啊,我看到你接受了自己的答案。我的错。所以看来你确实看到做你最初提出的问题毫无意义,而是选择了内存检查!我会留下我的帖子,让其他任何读者都清楚地知道这个问题