主机 ping 测试始终可以从交互式bash
命令行正常工作西格文,在它自己的 crontab 中表现不正确——总是选择第二个主机——我不明白为什么:
SHELL=/bin/bash
*/29 7-23 * * * [ -n "$(pidof unison)" ] || (partner=5.174.63.120; ping -A -c5 $partner 6 7 |grep -w "ttl" || partner=5.3.172.247; time nice unison-sync $partner &> /tmp/sync.master.dev.log )
which ping
/usr/bin/ping
这基本上希望 5.174.63.120 成为第一选择同步主机首选项,但是如果此时没有 ping 回来,则在本轮中使用 5.3.172.247。如果unison
尚未运行,那就是。
然而,从命令行运行始终按预期工作,回显第一个 IP 地址(如果可用),否则回显第二个:
partner=5.174.63.120; ping -A -c5 $partner 6 7 |grep -w "ttl" || partner=5.3.172.247; echo $partner
在 Ubuntu 中,这在crontab
cli 中都有效。
有没有更好的方法可以实现这一点,既紧凑又在我的两个操作系统(Windows7,32 位下的 Linux Ubuntu 11.10 和 Cygwin)上仍然可移植?
更好的是,我想将我的主机检查推广到两个以上,但仍然将其编码为简洁的 crontab 行:
如果可达,则使用 A,否则,如果可达,则使用 B,否则,如果可达,则使用 C,...否则仅使用 Z。
答案1
在 Cygwin 的 crontab 中,它给出了完整的路径/usr/bin/ping
并且它可以工作。愚蠢的是,我之前没有考虑到这一点——在 shell 中,它已经显示出比 Windows 版本的 ping 优先级,而且我很久以前就保留了它。
我想我必须忍受 cron 环境的怪癖(就像 cygwin 中的其他许多东西一样),无法使事情与我的本机 Linux 主机完全一致。顺便说一句,在 Ubuntu 中是/bin/ping
这样。
未来考虑用andLinux 代替Cygwin。
如果有人仍然向我展示压缩的多主机故障转移列表 A..B..etc..Z 版本,我将非常感激。
答案2
您是否考虑过使用平衡?他们的网站表明它可以在 Cygwin 上运行。您可以一致同步到 localhost:5555,然后通过 RR 或故障转移将端口 5555 负载平衡到多个主机。