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 に 1 行のみを含める場合は、スクリプトを変更して日付もチェックすることができます。

于 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 日 (第 3 週) には実行されません。3 週目 (または日曜日でない場合) に終了するようにスクリプトにチェックを入れるのは簡単かもしれません。

于 2009-04-10T00:03:25.567 に答える
0

3 番目の土曜日を除く任意の土曜日に実行したい場合 (#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. 3 番目の週末の部分を無視して、必要なときに特定のスクリプトを実行する cron ジョブを作成します
  2. 21 で実行される cron ジョブと 28 で実行される別の cron ジョブを作成して、スクリプトを別のノーオペレーション スクリプトに切り替えます。

ハッキーですが、うまくいきます

于 2009-04-10T00:07:47.633 に答える