给出如下配置:
check host web1 address web1
if failed host web1 port 80 protocol http
then exec "/usr/local/bin/failover.sh -h web2"
我能否检测 web1 是否已从故障状态恢复,并执行“故障回复”操作?
如果我只是想检测它是否启动,那么我将在每个守护进程的几秒钟内运行一次故障转移命令,如果没有必要,我不想这样做;它会提供不必要的日志条目和警报。
答案1
感谢 Eric Pailleau他的建议这导致了一个可行的答案:
check host web1 address web1
if failed host web1 port 80 protocol http
then exec "/bin/bash -c '/usr/bin/test ! -f /var/tmp/web-failover && ( /usr/local/bin/failover.sh -h web2 ; touch /var/tmp/auth-failover )'"
else if succeeded
then exec "/bin/sh -c '/usr/local/bin/failover.sh -h web1 ; rm -f /var/tmp/web-failover)'"
很奇怪,但是如果成功调用 /bin/bash,monit 似乎不会运行该命令。我怀疑它认为它已经运行过该命令了,所以不去管它。然而,它似乎并不介意一遍又一遍地运行第一个命令!