토요일에 시작하여 2 주마다 Cronjob이 실행됩니다.


11

오늘은 2014 년 10 월 3 일 금요일 오전 3:58

다음 날짜에 cronjob을 실행하도록 예약하고 싶습니다.

  1. 2014 년 10 월 4 일 토요일 오전 8:00
  2. 2014 년 10 월 18 일 토요일 오전 8:00
  3. 2014 년 11 월 1 일 토요일 오전 8:00 ... ...

토요일마다 8시에 2 주마다.

답변:


27
0 8 * * 6 test $((10#$(date +\%W)\%2)) -eq 1 && yourCommand

date +%W: 월요일을 주중 첫 번째 요일, 오늘 주 39로 표시하는 주 수

10#$(date +%W): date +W십진수로 수렴하고 쉘 기본 구문 분석 혼동을 피하십시오.

$((39%2)): 모듈로 연산 : 결과는 0 (짝수 주) 또는 1 (홀수 주 수)이며 이번 주 결과는 1, 다음 주 0

test 1 -eq 1: 산술 테스트 (같음),이 경우 결과는 부울 true입니다.

&& yourCommand: 부울 AND : yourCommand이전 명령의 결과가 부울 true 인 경우에만 실행

연도는 53 (올해)과 1 (내년)의 2 주일입니다.


2
우아합니다! 이미 언급했듯이, 올해의 53 번째 토요일에는 약 4 년마다 약 70 년이되는 코너 케이스가 있습니다.
MadHatter

@ Cyrus 귀하의 답변에 감사드립니다.하지만 * * * * 5 테스트 $ (($ (date + % W) % 2)) -eq 1 && /u02/restore/scripts/test.sh를 작성하면 스크립트가 실행하지만 * * * * 5를 쓰면 /u02/restore/scripts/test.sh 스크립트가 실행됩니다. 왜 당신의 표정이 작동하지 않습니까? 방금 사례를 테스트하고 있었고 어떻게 든 작동하지 않는 것으로 나타났습니다.
kupa

1
내 실수. Cron은 %를 줄 바꿈으로 해석합니다. cronjob에서 \로 두 %를 모두 탈출하십시오.0 8 * * 6 test $(($(date +\%W)\%2)) -eq 1 && yourCommand
Cyrus

이 오래된 질문을 다시 가져 와서 미안하지만 그것은 효과가 없었으며 $((10#$(date +%W)%2)) -eq 1 && echo OK쉘을 실행하려고하면 주 계산 결과를 실행하려고합니다 -bash: 1: command not found. 왜 그렇게하고 있는지 실마리가 있습니까? 감사.
jhuet

3
@ jhuet : test사용자가 아닙니다. 명령입니다. 시도 :test $((10#$(date +\%W)%2)) -eq 1 && echo odd || echo even
사이러스

4

당신이 보여준 것은 "매주"입니다. 그런 다음 코드는 다음과 같습니다.

0 8 * * 6

2 주마다 실행해야합니까?

0 8 * * 6 expr `date +\%s` / 604800 \% 2 >/dev/null || yourCommand

1
명령을 설명해 주시겠습니까?
kupa

1
Cyrus가 제공 한 것을 사용하는 것이 좋습니다. $ (($ (date + % W) % 2)) "W"는 연중 주 번호를 나타냅니다. 0에서 53으로 시작합니다. 2로 나눌 수 있으면 "매초"주입니다. cronjob은 매주 실행되지만 주 번호를 2로 나눌 수있는 경우에만 'expr'명령을 실행합니다.
Glueon

명령 줄에서 테스트 $ (($ (date + % W) % 2)) -eq 1을 실행하면 아무것도 반환되지 않습니다. 왜 그렇습니까?
kupa

1
echo $?해당 명령을 실행 한 후 실행하면 리턴 코드를 확인할 수 있습니다. 이것이 중요한 이유
Ale
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.