【问题标题】:reload nginx with monit用 monit 重新加载 nginx
【发布时间】:2015-01-02 10:50:39
【问题描述】:

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

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

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

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

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

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

谢谢。

【问题讨论】:

    标签: nginx monit


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      nginx -s reload
      

      【讨论】:

      • 感谢您的回复。我已经编辑了我的问题,因为我没有指出我需要重新加载以及重新启动。
      【解决方案3】:

      “使用文档。卢克!”

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

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

      【讨论】:

      • 谢谢。我认为我真正追求的是如何在 Monit 中启用它。我知道如何重新加载 nginx,但不能通过 Monit 自动加载。我真的很想实现这个mmonit.com/monit/documentation/…,但需要重新加载,而不是重新启动。我会更新问题以反映这一点。
      • 您似乎在寻求错误的建议 - 重新加载 nginx 通常在其配置更改后完成,而 monit 旨在检查 nginx 的行为\存在。如果 monit 发现 nginx 失败 - 你应该重新启动它,而不是重新加载它的配置。
      【解决方案4】:

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

      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 秒得到一个)。

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

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

      编辑:啊,我看到你接受了你自己的答案。我的错。因此,您似乎确实发现按照最初的要求去做是没有意义的,而是选择了内存检查!我会留下我的帖子,让其他有同样困惑的读者明白这一点

      【讨论】:

        猜你喜欢
        • 2022-11-30
        • 2014-02-13
        • 1970-01-01
        • 1970-01-01
        • 2016-05-22
        • 1970-01-01
        • 2018-12-30
        • 2020-11-09
        • 1970-01-01
        相关资源
        最近更新 更多