我们设置了大约一百台机器,每台机器都运行 cron 作业,例如启动和停止服务,并在一天结束时将这些服务的日志文件存档到集中存储库。
我们头疼的一件事是三天周末(节假日我们休息)。我们不希望服务在这几天启动并连接到我们业务合作伙伴的机器。
目前,我们通过手动注释掉最关键的工作并让一大堆错误整天发生来实现这一点。这并不理想。
基本上,如果一份工作在日期字段中设置了“1-5”,我们希望这表示“工作日”,而不是“星期一至星期五”。我们有一个数据库来跟踪哪些日子确实是“工作日”
那么,是否有可能覆盖 Cron 的日匹配算法,或者是否有其他方法可以轻松设置 cron 设置以避免在周一假期启动?
谢谢!
答案1
Cron 不支持这种决定。它很快就会变得非常复杂。在加拿大,各省的假期甚至都不一致。
我会编写一个运行脚本,检查节假日数据库,如果是节假日则退出。尝试以下操作:
/bin/bash #!/bin/bash 今天=$(日期+%Y%m%d) 如果 grep -q $TODAY /etc/holidays; 那么 echo 跳过假期 $* 出口 0 菲 $*
答案2
我可以想到几种实现此目的的方法,但最实用的解决方案将取决于所有 cron 作业的确切设置。例如:
如果可以通过脚本查询工作日数据库,那么您可以在星期日运行 cron 作业,以确定第二天(星期一)是否是工作日,并在某处设置/清除文件。所有 cron 作业都可以查找此文件的存在,并相应地选择运行或退出。
或者
您可以用一个主作业替换所有单独的 cron 条目,只有当(可检查的)数据库表明今天是工作日时,该主作业才会触发所有其他条目。