为了账号安全,请及时绑定邮箱和手机立即绑定

mmonit golang 重启缓慢且状态不存在

mmonit golang 重启缓慢且状态不存在

Go
一只萌萌小番薯 2021-09-20 10:47:48
我创建了必须在崩溃时重新启动的monit应用程序golang site$ cd /etc/monit/conf.d $ vim checkSite 它启动程序nohup并将其保存pid到文件:check process site with pidfile /root/go/path/to/goSite/run.pid    start program = "/bin/bash -c 'cd /root/go/path/to/goSitePath; nohup ./goSite > /dev/null 2>&1 & echo $! > run.pid'" with timeout 5 seconds    stop program = "/bin/kill -9 `cat /root/go/path/to/goSitePath/run.pid`"它开始正常。Process 'site'  status                            Running  monitoring status                 Monitored  pid                               29723  parent pid                        1  uptime                            2m   children                          0  memory kilobytes                  8592  memory kilobytes total            8592  memory percent                    0.4%  memory percent total              0.4%  cpu percent                       0.0%  cpu percent total                 0.0%  data collected                    Thu, 05 Mar 2015 07:20:32然后为了测试它如何在崩溃时重新启动,我手动杀死了它golang site。这里我有两个问题:站点重新启动相当慢:虽然在我设置的配置中需要 1 分钟 with timeout 5 seconds即使在站点实际上重新启动后,sitein 的状态也会monit变为Does not exist。我猜这是因为在杀死并重新启动站点后pid会随机更改,但是我不知道如何克服这个问题。重启后状态:Process 'site'      status                            Does not exist      monitoring status                 Monitored      data collected                    Thu, 05 Mar 2015 08:04:44如何减少重启时间以及如何修复站点monit status?monit 日志:[Mar  5 08:04:44] error    : 'site' process is not running[Mar  5 08:04:44] info     : 'site' trying to restart[Mar  5 08:04:44] info     : 'site' start: /bin/bash[Mar  5 08:06:44] info     : 'site' process is running with pid 31479
查看完整描述

1 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

monit 没有任何订阅机制来立即发现进程是否已经死亡。

守护进程模式下,如文档所述,monit 通过定期轮询所有配置规则的状态来工作,它的轮询周期在守护进程启动时配置,并且在某些 Linux 发行版中默认为 2 分钟,这意味着在这种情况下,monit 可能需要直到2 分钟采取任何行动。

在你的 monitrc 中检查这个配置,它是用set daemon指令配置的,例如,如果你想每 5 秒检查一次状态,那么你应该设置:

set daemon 5

在每个循环中,它都会更新其状态,并根据需要执行操作。因此,如果它检测到该进程不存在,它将报告Does not exist直到下一个轮询周期,即使它已经决定重新启动它。

timeoutstart daemon指令没有任何与本次调查周期,这是时间的monit将给予启动该服务。如果服务在这段时间内没有启动,monit 将报告它。

如果 monit 不符合您的要求,您也可以尝试supervisord,它始终了解执行程序的状态。


查看完整回答
反对 回复 2021-09-20
  • 1 回答
  • 0 关注
  • 209 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信