有没有办法安排一个不在本月第3个周末运行的cron作业?

时间:2009-04-09 23:45:57

标签: cron posix

任何想法,任何人?

4 个答案:

答案 0 :(得分:2)

将以下内容保存为/usr/local/bin/is_third_week_in_month.sh或某个地方

#!/bin/bash

if [ $# != 3 ]
then
    echo "Usage: $0 <yyyy> <mm> <dd>" 1>&2
    exit 127
fi

YEAR=$1
MONTH=$2
DAY=$3

FIRST_WEEK_IN_MONTH=`date +%V -d $YEAR-$MONTH-01`
WEEK_FOR_DAY=`date +%V -d $YEAR-$MONTH-$DAY`

DIFF=$(($WEEK_FOR_DAY - $FIRST_WEEK_IN_MONTH))

if [ $DIFF = 2 ]
then
    # this is the third week
    exit 0
else
    exit 1
fi

然后添加到crontab

12 00 * * 1,2,3,4,5  your_command
12 00 * * 6,7  test ! /usr/local/bin/is_third_week_in_month.sh `date "+%Y %m %d"` && your_command

如果你想在crontab中只有一行,你可以修改脚本以检查日期。

答案 1 :(得分:0)

在第1天,第2天,第4天(可能是第5天,可能会发生)周末运行。

# m h dom      mon dow   command
  * * 1-20,28-31 *   0     echo #test

我不知道这是每天还是周日(第0天),但它不会在21日到27日 - 第三周运行。如果是第三周(或者不是星期天),可以很简单地检查将退出的脚本。

答案 2 :(得分:0)

如果你希望它在任何可能的星期六上运行,除了第三个星期六(尝试#3):

GREP=/usr/local/bin/grep
TODAY=/bin/date "+%d"
THIRD_SAT=/bin/date -v1d -v+1m -v-7d -v-sat "+%d"
#min hr day month weekday script
0    0  *   *     6       ($THIRD_SAT | $GREP $TODAY) || /bin/echo doit

答案 3 :(得分:0)

  1. 在需要时创建一个运行给定脚本的cron作业,忽略第3个周末部分
  2. 创建一个在21上运行的cron作业,在28上运行另一个作业,将脚本切换出来并返回另一个无操作脚本。
  3. Hacky但它​​会起作用