我在生产环境中使用 monit 实用程序来监控多个守护进程(我们的微服务)。我正在尝试找出在更新守护进程时取消监控/监控它们的最佳方法。所以,基本上我需要类似这样的伪代码:
has_monit = false
if `monit watches daemon-xxx` then
has_monit = true
monit unmonitor daemon-xxx
endif
apt-get install xxx.deb
if has_monit then
monit monitor deamon-xxx
endif
monit summary daemon-xxx
不幸的是,无论成功还是失败,它似乎总是返回退出代码 0,并打印有关失败的原始 html,例如
[bialix@server ~]$ sudo monit summary xxx
<html><head><title>400 Bad Request</title></head><body bgcolor=#FFFFFF><h2>Bad Request</h2>Service 'xxx' not found<hr><a href='http://mmonit.com/monit/'><font size=-1>monit 5.30.0</font></a></body></html>
[bialix@server ~]$ echo $?
0
仅当 monit 没有运行时才会出现退出代码 1。
这里正确的方法是什么?解析输出monit summary
?
答案1
你是对的。Monit 的退出代码是输入的命令的状态。
如果资源未定义或者仅存在任何其他内部问题,则您会得到“1”。
建议,我使用“monit -B summary xxxx”来获取服务状态并解析命令输出。选项“-B”是批处理命令行模式,并删除输出表和颜色。