2009-04-09 8 views

答えて

0

1週目、2週目、4週目(週に5回目)に実行してください。

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

それが日常の実行、またはちょうど日曜日(0日目)に、それは27日に21日に実行されませんでしょう場合、私は考えている - 第3週。 3週目(またはそれが日曜日でない場合)に終了するスクリプトに小切手を入れるだけでも簡単です。あなたはそれが第三1以外の任意の可能な土曜日に実行したい場合は

+0

これは実際には動作しません(少なくともvixie cronでは動作しません)。これにより、毎週日曜日に1-20,28-31、*、*日にスクリプトが実行されます。 domとdowが指定されると、いずれかの条件が成功するとスクリプトが実行されます。 –

+0

私は訂正されますが、「日曜日ではないので、終了」というスクリプトのチェックで解決されます。それではまた、毎週日曜日にそれを走らせて、21日から27日の場合は出て行くでしょう。 –

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 
+0

これは実際には動作しません(少なくともvixie cronではない)。これにより、毎週土曜日に1-13日、21-31日、*および*日にスクリプトが実行されます。日と月の曜日が指定されると、いずれかの条件が成功するとスクリプトが実行されます。 –

+0

それを指摘してくれてありがとう。私は、最後の2つの列がANDedの代わりにORedされていることを認識していませんでした。毎日何か新しいことを学ぶ! –

0
  1. は、第三週末の一部
  2. を無視して、必要なときに指定したスクリプトを実行するcronジョブを作成します
  3. 21で実行されるcronジョブを作成し、28でもう1つのcronジョブを作成して、スクリプトを別のno-opスクリプト用に戻して戻します。

ハックが、それは

2

保存を働くだろう、次の

#!/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 

、その後は

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に追加またはあなたがチェックするスクリプトを変更することができ/usr/local/bin/is_third_week_in_month.shとして、あるいはいくつかの場所あなたがcrontabに1行しか持たないようにしたいのであれば、日付のために。

+0

私のシステムでは、日付+%Vは1桁の週番号の先頭に0を表示します。 $ DIFFの計算では、それが8進値を持っていると思って失敗すると思います。このスクリプトを2009年02月19日に実行してみてください。 FIRST_WEEK_IN_MONTH = 'date +%V -d $ YEAR- $ MONTH-01 | sed s/^ 0 //' ---次の行に--- WEEK_FOR_DAY = 'date +%V -d $ YEAR- $ MONTH- $ DAY | sed s/^ 0 // ' –

+0

また、Jan 1のISO週番号(%V)は52(たとえば2006)または53(たとえば2005) $ DIFF計算が負であり、1月に第3週を見つけることができません。だから、 "%V"を "%W"に変更する必要があります。 "%W"は週が0または1で始まり、52または53週目に終了します(%Vは52,53、または1で終了できます)。 –

関連する問題