1

任何想法,任何人?

4

4 回答 4

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 中包含一行,您也可以修改脚本以检查日期。

于 2009-04-12T19:39:29.093 回答
0

在第 1、第 2、第 4 个(也许第 5 个,可能会发生)周末运行它。

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

我不知道它是每天运行,还是只在周日(第 0 天)运行,但它不会在 21 日到 27 日(第三周)运行。如果是第三周(或者不是星期天),在脚本中进行检查可能很简单。

于 2009-04-10T00:03:25.567 回答
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
于 2009-04-10T00:05:21.773 回答
0
  1. 在需要时创建一个运行给定脚本的 cron 作业,忽略第三个周末部分
  2. 制作一个在 21 上运行的 cron 作业,另一个在 28 上运行,以将脚本切换出和切换回另一个无操作脚本。

哈克但它会工作

于 2009-04-10T00:07:47.633 回答