需要跨 Linux 和 Cygwin 的可移植 crontab 主机检查/故障转移逻辑

需要跨 Linux 和 Cygwin 的可移植 crontab 主机检查/故障转移逻辑

主机 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 中,这在crontabcli 中都有效。

有没有更好的方法可以实现这一点,既紧凑又在我的两个操作系统(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 负载平衡到多个主机。

相关内容