我有这个需求,需要动态地将服务添加到 monit。因此,我正在做的是将服务 monit 文件复制到 /etc/monit.d/(包含在 /etc/monitrc 中)并重新加载 monit。
cp <service-monit-file> /etc/monit.d/
monit reload
monit monitor <service-name>
现在 monit 命令在后台运行。因此,monit monitor
命令失败(未找到服务),因为monit reload
没有立即完成。
那么可以采取什么方法来确保monit monitor
仅在完成后才调用monit reload
。我试过了monit -I reload
,但结果是一样的。
使用 tail 检查 monit 日志并在出现“reloaded”字符串时中断也是不可能的,因为 tail 将输出到 stdout,这是不允许的。
答案1
我无法重现此问题(我得到了不同的错误),但我猜想monit monitor
在你的情况下该命令会失败并返回非零值。然后我会这样做:
while ! monit monitor <service-name> 2>/dev/null
do
sleep 1
done
注意:您可能需要添加超时机制以避免无限while
循环。