我需要知道如何在集群环境中设置cron作业。 我有4 + 1集群环境,第一个服务器正在运行crontab脚本,如果它下来,cron应该转移到另一个。怎么可能?
答案 0 :(得分:0)
一个常见资源是rcron。这个项目暂时没有更新,但仍然编译得很好。它通过使用状态文件来确定它是否是活动服务器。但是,Rcron并没有更新状态文件;它依赖于Heartbeat之类的服务来为您更新状态文件。它的工作原理是在你的常规cron中使用rcron预先添加每个cron命令,即:
0 * * * * /bin/bash /usr/local/scripts/myscript.sh 2>/dev/null
会变成
0 * * * * /usr/local/rcron /bin/bash /usr/local/scripts/myscript.sh 2>/dev/null
正如您所看到的,您也可以 实现自己的执行此类功能的脚本:
0 * * * * /usr/local/scripts/active_or_not.sh && /bin/bash /usr/local/scripts/myscript.sh 2>/dev/null
脚本的内容类似于:
#! /bin/bash
shouldIBeActive() {
# See if this server is able to run all the crons correctly
canRun || return 1
# See if there is already another server set to active
shouldRun || return 1 # Maybe even still using Hearbeat for a state file
}
if [ shouldIBeActive ]; then
logger "Set to active server"
exit 0
else
logger "Not set to be active."
exit 1
fi
如果你想避免在多个服务器上更新这个cron,你可以使用NFS或DRBD或其他东西来拥有一个共享的crontab,尽管它的可靠性会突然变得依赖于它。