2009-04-09 6 views

답변

0

주말에 1, 2, 4 (어쩌면 5 일)에 실행하십시오. 즉 매일 실행하거나 일요일 (일 0)한다면

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

는 나도 몰라,하지만에 27 21에서 실행되지 않습니다 - 세 번째 주. 세 번째 주일 (또는 일요일이 아닐 경우) 종료하는 스크립트에 수표를 넣는 것만 큼 간단 할 수 있습니다. 당신이 세 번째를 제외하고 가능한 모든 토요일에 실행하려면

+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

지적 해 주셔서 고맙습니다. 마지막 두 열이 ANDed 대신 ORed임을 깨닫지 못했습니다. 매일 새로운 것을 배우십시오! –

0
  1. 이 3 주말 일부
  2. 을 무시하고 필요한 경우 해당 스크립트를 실행하는 cron 작업을
  3. 21에서 실행되는 cron 작업을 만들고 28에서 다른 작업을 수행하여 스크립트를 다시 작동시키고 다른 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에 한 줄만 넣고 싶다면 데이트도 마찬가지입니다.

+0

내 시스템에서 date + % V는 한 자리 숫자의 주 번호 앞에 선행 0을 인쇄합니다. 그것은 $ DIFF의 계산이 8 진수 값을 가지며 실패했다고 생각합니다. 2009 년 2 월 19 일에이 스크립트를 실행 해보십시오. FIRST_WEEK_IN_MONTH ='date + % V -d $ YEAR- $ MONTH-01 | sed s/^ 0 //'--- 다음 줄에 --- WEEK_FOR_DAY ='date + % V -d $ YEAR- $ MONTH- $ DAY | sed/^ 0 //' –

+0

또한 1 월 1 일의 ISO 주 번호 (% V)는 52 (예 : 2006) 또는 53 (예 : 2005) 일 수 있습니다. $ DIFF 계산이 음수이고 1 월에 3 주를 찾지 못합니다. 따라서 "% V"를 "% W"로 변경하여 주 0 또는 1에서 항상 연도를 시작하고 52 또는 53 주 (% V는 52, 53 또는 1에서 연말을 끝낼 수 있음)의 연도를 종료해야합니다. –