Cron每第二个星期三运行一次?


9

我需要找到一种方法来计划一项工作,以使其每月的第二个星期三运行。这可能吗?

linux  cron 

1
问题似乎提供了适当的答案。
scurker 2011年

1
是的,但是这个问题是关于星期二的,而不是星期三的;)可以接受的答案虽然很聪明。
edoloughlin 2011年

>>是的,但是这个问题是关于星期二的,而不是星期三的;)公认的答案很聪明,尽管...将星期二更改为星期三有什么困难?
2011年

0 * * * 3测试$(date \ +%u)-eq 3 && echo“开始运行我”试试这个。没有粘贴答案,因为一个班轮问题很模糊。

Answers:


14

我的crontab手册页(可惜我似乎无法在网上找到)给出了以下示例:

# Run on every second Saturday of the month
0 4 8-14 * *    test $(date +\%u) -eq 6 && echo "2nd Saturday"

适应您的目的...

0 4 8-14 * *    test $(date +\%u) -eq 3 && job.sh

3
对于希望编辑此答案的任何人,您不只是使用“星期几”字段的原因是,如果同时限制月份中的某天和一周中的某天(即不是*),则当其中一个匹配时,该命令将运行。
Hasturkun

crontab 手册
query =

1
我发现我必须逃脱%u,所以:date +\%u
Antony D'Andrea

3

通过结合使用星期几技巧和工作日,可以避免运行外部脚本:

# Run on every second Wednesday of the month
0 4 8-14 * Wed job.sh

这也避免了运行另一个外部程序。8-14会选择与该月第二周匹配的所有日期。然后仅在那个星期三过滤掉。


1

单独使用cron是不可能的,但是您可以每周执行一次测试脚本:

在crontab中,每个星期三的12.00运行second_wed.sh:

0 12 * * 3 /home/you/bin/second_wed.sh

在second_wed.sh中:

#!/usr/bin/env bash
day_of_month=`date +"%
if [ $day_of_month -gt 7 -a $day_of_month -lt 15 ]; then
  # Call your program here instead of 'ls'…
  ls
fi

1

根据答案,您可以执行以下操作:

00 12 * * Wed expr `date +\%d` \> 7 \& `date +\%d` \< 15 >/dev/null && runJob.sh

1

对于CentOS 7服务器,这似乎是对我有用的语法。请注意周围的空间[]。我花了一段时间才弄清楚。

它将test.sh在每月第二个星期三的13:07 / 1:07 PM 运行文件。(0 =星期日,1 =星期一,2 =星期二,3 =星期三等)

07 13 8-14 * * [ `date +\%u` = 3 ] &&  /root/scripts/test.sh

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.