使一个具有多个cronjobs的故障转移对避免两次运行这个过程是一个很好的解决scheme?
无论是在故障转移中,还是在它们之间分配作业,并且当其中一个节点发生故障时,当然能够接pipe所有作业。
我可以为此写一个脚本,但有人必须已经解决这个问题,还是这样一个不寻常的要求?
如果您有某种集群解决scheme来提供高可用性,那么执行此操作相当简单。
我们在集群中的两个(或所有)节点上设置所有的cron作业。 每个作业都是通过执行一个小脚本来启动的,如果这个脚本是群集中的主节点(通过检查群集浮动IP地址),那么这个小脚本就可以运行。 如果这不是主节点,则check_for_master脚本将退出,导致整个cron作业失败。 如果此节点是主节点,则check_for_master脚本将正常运行该作业。
check_for_master脚本的内容实际上取决于您使用的是哪个集群软件以及您正在运行的操作系统。
例如,下面是一个示例crontab条目:
00 04 * * * /usr/local/bin/check_for_master /usr/local/bin/program-you-want-to-run >/tmp/logfile.out 2>&1
你可以使用' rcron '来解决这个问题。 Rcron为你提供一个状态文件,它只是简单的说“active”或者“passive”,如果它是活动的,你的cron就会在某个机器上运行。 如果状态文件被设置为被动,它将不会运行。 就那么简单。
您的cron作业过去看起来像:
* * * * * root echo "foobar"
将需要更改为:
* * * * * root rcron echo "foobar"
就是这样。
我认为你正在寻找的是一些作业调度系统(如在计算机集群中所使用的)。 当然,你不需要最多的东西,但是调整cron来完成你所需要的事情可能比评估这样一个工具更多的工作。