아이디어가 있으십니까?한 달의 3 번째 주말에 실행되지 않는 cron 작업을 예약하는 방법이 있습니까?
답변
주말에 1, 2, 4 (어쩌면 5 일)에 실행하십시오. 즉 매일 실행하거나 일요일 (일 0)한다면
# m h dom mon dow command
* * 1-20,28-31 * 0 echo #test
는 나도 몰라,하지만에 27 21에서 실행되지 않습니다 - 세 번째 주. 세 번째 주일 (또는 일요일이 아닐 경우) 종료하는 스크립트에 수표를 넣는 것만 큼 간단 할 수 있습니다. 당신이 세 번째를 제외하고 가능한 모든 토요일에 실행하려면
이것은 실제로 작동하지 않습니다 (최소한 vixie cron에서는 그렇지 않습니다). 그러면 스크립트는 매주 일요일 1-20 일, 28-31 일 * 및 * 일에 실행됩니다. dom과 dow가 지정되면 두 조건 중 하나가 성공하면 스크립트가 실행됩니다. –
나는 정정을 세운다. 그러나 '일요일 아니요, 출근을위한'스크립트의 체크는 그것을 해결할 것이다. 다시 한 번 일주일에 한 번씩 실행하고 21 일에서 27 일까지 종료하십시오. –
(# 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
이것은 실제로 작동하지 않습니다 (적어도 vixie cron에서는 그렇지 않습니다). 이렇게하면 매주 토요일 1-13 일, 21-31 일, * 및 * 일에 스크립트가 실행됩니다. 요일과 요일을 지정하면 두 조건 중 하나라도 충족되면 스크립트가 실행됩니다. –
지적 해 주셔서 고맙습니다. 마지막 두 열이 ANDed 대신 ORed임을 깨닫지 못했습니다. 매일 새로운 것을 배우십시오! –
- 이 3 주말 일부 을 무시하고 필요한 경우 해당 스크립트를 실행하는 cron 작업을
- 21에서 실행되는 cron 작업을 만들고 28에서 다른 작업을 수행하여 스크립트를 다시 작동시키고 다른 no-op 스크립트로 다시 전환하십시오.
해키하지만
저장을 일하는 것이 다음
#!/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에 한 줄만 넣고 싶다면 데이트도 마찬가지입니다.
내 시스템에서 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 //' –
또한 1 월 1 일의 ISO 주 번호 (% V)는 52 (예 : 2006) 또는 53 (예 : 2005) 일 수 있습니다. $ DIFF 계산이 음수이고 1 월에 3 주를 찾지 못합니다. 따라서 "% V"를 "% W"로 변경하여 주 0 또는 1에서 항상 연도를 시작하고 52 또는 53 주 (% V는 52, 53 또는 1에서 연말을 끝낼 수 있음)의 연도를 종료해야합니다. –
언제 실행 하시겠습니까? – davidfg4
3 주말에 속하지 않는 매일 실행하고 싶습니까? 아니면 3 주말이 아닌 매 주말마다 실행하기를 원하십니까? 달이 월요일에 시작하면 그 주말입니까? – Eddie