如何让 cronjobs 具有高可用性?

如何让 cronjobs 具有高可用性?

有什么好的解决方案可以使运行多个 cronjob 的故障转移对避免运行两次进程?

无论是通过故障转移,还是通过在它们之间划分作业,当然当其中一个节点发生故障时能够接管所有作业。

我可以为此编写一个脚本,但一定有人已经解决了这个问题,或者这是一个不常见的请求?

答案1

如果您有某种集群解决方案来提供高可用性,那么这样做相当简单。

我们在集群中的两个(或所有)节点上设置了所有 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

答案2

您可以使用 '罗克罗恩' 针对这个特定问题。Rcron 为您提供一个状态文件,其中只写着“主动”或“被动”,如果是主动的,您的 cron 将在某台机器上运行。如果状态文件设置为被动,它将不会运行。就这么简单。

您的 cron 作业以前看起来像这样:

* * * * *    root    echo "foobar"

需要更改为:

* * * * *    root    rcron echo "foobar"

就是这样。

答案3

我认为您正在寻找的是一些作业调度系统(如在计算集群中使用的)。当然,您不需要它的大部分内容,但调整 cron 来做您需要的事情可能比评估这样的工具更费力。

相关内容