没有在假期运行cron工作的Cron提示(周三为期三天的周末)


3

我们有大约一百台机器设置,每台机器运行cron作业,如启动和停止服务,并在一天结束时将这些服务的日志文件归档到集中式存储库。

我们头疼的是为期三天的周末(我们假期休息)。我们不希望服务在那些日子启动并连接到我们的业务合作伙伴的计算机。

我们目前通过手动评论最重要的工作并让一堆错误全天发生来实现这一目标。不理想。

基本上,如果一份工作在日期字段中设置为“1-5”,我们希望这意味着“工作日”,而不是“星期一到星期五”。我们有一个数据库,可以追踪哪些天确实是“工作日”

那么,是否可以覆盖Cron的日期匹配算法,或者是否有其他方法可以轻松设置cron设置以避免在周一假期启动?

谢谢!


在星期二做他们吗?
William Hilsum

@Wil,设置 1-5 每周一至周五运行一个脚本,每周5次。只应跳过几个星期一(根据数据库中的某些值)。
Arjan

@Arjan - :无论如何,这只是个蠢事!我没有一直读完:(谢谢!
William Hilsum

Answers:


4

Cron不支持这种决心。它变得非常复杂非常快。在加拿大,省份之间的假期甚至不一致。

我会编写一个用于检查假日数据库的跑步者脚本,如果是假期则退出。尝试类似的东西:

#!/bin/bash

TODAY=$(date +%Y%m%d)
if grep -q $TODAY /etc/holidays; then
   echo Skipping holiday for $*
   exit 0
fi

$*

你应该放下方括号。我在假设 -1 在第一场比赛中停止(在GNU grep中 -m 1 )。你也可以用 -qs 要么 > /dev/null >&2 抑制输出。
Dennis Williamson

@Dennis更新。在编写脚本时分心了。
BillThor

0

我可以想象一下这样做的几种方法,但最实用的解决方案将取决于所有cron作业的确切设置。例如:

如果可以通过脚本查询工作日数据库,则可以在星期日运行cron作业,以确定第二天(星期一)是否是工作日,并在某处设置/清除文件。所有cron作业都可以查找此文件的存在,并选择相应地运行或退出。

要么

您可以使用一个主作业替换所有单个cron条目,如果(可检查)数据库表明它是一个工作日,则只会触发所有其他作业。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.