安排一个cron工作在每个月的第1,第2和第3个星期二运行

时间:2012-11-27 21:27:41

标签: cron crontab

我非常喜欢为我拥有的三个脚本设置cron时间表。我需要安排第一个脚本在每个月的第一个星期二运行,第二个脚本在每个月的第二个星期二运行,第三个脚本在每个月的第3个星期二运行。这是我到目前为止所拥有的。

# Run first script on the 1st Tuesday of every month at 9:00 AM
0 9 1,2,3,4,5,6,7 * 2 wget -q -O /dev/null http://site.com/first-script

# Run second script on the 2nd Tuesday of every month at 9:00 AM
0 9 8,9,10,11,12,13,14 * 2 wget -q -O /dev/null http://site.com/second-script

# Run third script on the 3rd Tuesday of every month at 7:00 AM
0 7 15,16,17,18,19,20,21 * 2 wget -q -O /dev/null http://site.com/third-script

我相信这些脚本将在每个月的第1个,第2个和第3个星期二运行,并且每个月的1-21个运行。看起来我已经阅读了本周的哪一天,而且几天都是AND,是真的吗?

希望这可能是c / cron,否则我将不得不决定运行脚本或不在脚本本身内。

4 个答案:

答案 0 :(得分:2)

您可以将cron设置为:

00 09 1-7,8-14,15-21 * 2 / path / myscript

这将运行第1,第2和第3个星期二的9 A.M的脚本。

答案 1 :(得分:1)

他们是OR。

它将在每天的星期几运行。

答案 2 :(得分:1)

如果您不想将日期检查逻辑直接放入您的脚本中,您可以让cron作业 shell命令部分检查星期几,并在执行脚本。

# Run first script on the 1st Tuesday of every month at 9:00 AM
0  9  1-7    *  *  [ "$(date '+\%a')" = "Tue" ] && wget -q -O /dev/null http://example.com/first-script

# Run second script on the 2nd Tuesday of every month at 9:00 AM
0  9  8-14   *  *  [ "$(date '+\%a')" = "Tue" ] && wget -q -O /dev/null http://example.com/second-script

# Run third script on the 3rd Tuesday of every month at 7:00 AM
0  7  15-21  *  *  [ "$(date '+\%a')" = "Tue" ] && wget -q -O /dev/null http://example.com/third-script

如果 [$(日期' + \%a')" ="星期二" ] 条件成功,脚本将执行。必须使用反斜杠转义%符号,因为cron将%视为特殊字符。

因为一周有7天,所以本月的第一个星期二保证在1-7范围内,第二个在8-14范围内,第三个在15-21范围内。

要捕获第一个星期二,不能执行:

0  9  1-7  *  2 && wget -q -O /dev/null http://example.com/some-script

...因为 1-7 (日期)和 2 (星期几)实际上是 OR&#39; d < / strong>即可。出于某种原因,Cron对这两个领域的处理方式与其他领域不同。在上面的示例中,您的脚本最终会在每周二的1-7范围内运行, AND

答案 3 :(得分:0)

另一种方法是创建主脚本以便每周二运行,验证星期二是否相应,并且相应的小时会调用相应的辅助脚本。

0 7,9 * * 2 wget -q -O /dev/null http://site.com/main-script

我希望这有用。

问候。