给定一个像这样的configuration:
check host web1 address web1 if failed host web1 port 80 protocol http then exec "/usr/local/bin/failover.sh -h web2"
我可以检测web1是否从失败状态返回,并执行“故障恢复”操作?
如果我只是想检测它是否已经启动,那么我将在每个守护进程中运行故障转移命令,如果不需要,我不想这样做。 它会提供不必要的日志条目和警报。
感谢埃里克Pailleau 他的build议 ,导致一个工作的答案:
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似乎不会运行该命令。 我怀疑它认为它已经运行了命令,所以不打扰。 但似乎并不介意一遍又一遍地运行第一个命令!