격주 cronjob을 예약하는 방법?


11

crontab (5)는 다음 필드를 정의합니다.

       field         allowed values
       -----         --------------
       minute        0-59
       hour          0-23
       day of month  1-31
       month         1-12 (or names, see below)
       day of week   0-7 (0 or 7 is Sun, or use names)

그리고 설명 :

 Step values can be used in conjunction with ranges.  Following a range
 with ``/<number>'' specifies skips of the number's value through the
 range.  For example, ``0-23/2'' can be used in the hours field to specify
 command execution every other hour (the alternative in the V7 standard is
 ``0,2,4,6,8,10,12,14,16,18,20,22'').

내 이해가있는 한, 격주로 잡을 수 없습니다. 해결 방법이 있다고 확신합니다. 무엇입니까? 아니면 내가 뭔가를 그리워 했습니까?


2
내가 찾을 수있는 가장 좋은 대답은 여기에 있습니다 : unix.stackexchange.com/questions/1224/…
— Somantra

... 그리고 U & L에 대한 답변은 내가하는 방식 일 것입니다, @Somantra :-)
— voretaq7

@ voretaq7, 나는 그것이 정식 답변이라고 말했을 것입니다. 그러나 나는 pedantic처럼 만나고 싶지 않았습니다. ;-)
— Somantra

답변:


8

매주 수요일마다 cron이 실행하도록 한 다음 짝수 또는 홀수 주인지 결정하십시오. 예를 들면 다음과 같습니다.

#!/bin/bash
week=$(date +%U)
if [ $(($week % 2)) == 0 ]; then 
    echo even week
else 
    echo odd week
fi

그러나 이것은 훌륭한 해결책이지만 실제로 질문 자체에 대답하지는 않습니다. 일정 논리로 물건을 망치지 않는 것이 좋습니다. 어쩌면 이것을 @Somantra가 준 링크와 통합 할 수 있습니다.
— Roman

그래, 인정해야한다 : 이것은 지금까지 가장 좋은 해결책이다. @Somantra가 제공 한 링크는 동일한 결과를 불필요하게 복잡한 IMHO (UNIX 시간 계산)로 달성하지만 동일한 스타일로 스크립트 대신 크론 작업에 직접 접근 방식을 추가하면 매우 우아합니다.
— Roman

이것은 53 주가 있기 때문에 2020 년에 중단됩니다. 예 : cron이 12 월 31 일에 격주로 실행되도록 계획된 경우 2020 년 12 월 31 일 (53 주) 및 2020 년 1 월 4 일 (1 주)에 실행됩니다.
— mad_fox

5

많은 크론 (사용중인 것을 지정하지 않은)이 범위를 지원합니다. 그래서 같은

0 0 1-7,15-21 * 3

매월 첫째, 셋째 주 수요일을 맞았습니다.


이것은 "스크립트에서 수행"방법보다 약간 더 우아하지만, crontab에 주석을 추가해야합니다 (일반적인 규칙 : 둘 이상이 -있거나 /관련이 있다면 일정을 설명하는 것이
— 좋습니다

나는 이것이 틀렸다고 생각한다. 매월 1 ~ 7 일, 15 ~ 21 일 , 매주 수요일에도 작업이 실행됩니다 . 의이 man 5 crontab: " 명령의 실행의 날은 두 개의 필드로 지정 될 수 있습니다 - 달의 일, 요일 두 필드가 제한되는 경우 때 (즉,하지 *있다), 명령이 실행됩니다. 두 필드가 일치 예를 들어, "30 4 1,15 * 5"는 매월 1 일과 15 일 오전 4시 30 분과 매주 금요일마다 명령을 실행합니다 (내 강조).
— MadHatter

1
실제로, 이는 사용중인 cron 데몬에 따라 다릅니다. 귀하의 작품은 vixie cron (RedHat 배포판에 포함)에서 온 것 같습니다. dillo의 cron에있는 "man crontab"에서 (Slackware) : 달과 요일을 모두 지정하면 *이 달의 N 번째 날로 해석됩니다 *. 여전히 스크립팅 된 솔루션 (계산 주 번호)은 유일한 휴대용 솔루션처럼 보입니다.
— AlvaroGMJ

2

격주로 실행해야하는 무언가를 위해이 1 강선을 사용하십시오 :

0 0 * * 5 [ `expr \`date +\%V\` \% 2` -eq 0 ] && echo "execute script" 

이 특정 스크립트는 금요일에 실행되도록 예약되어 있습니다. 실행할주는 "-eq 0"또는 "-eq 1"을 사용하여 조정할 수 있습니다.


1

Anacron 은 cron의 한계에 대한 좋은 해결 방법입니다.

  • Anacron에는 반복 기간 매개 변수가 있으며이를 14로 설정할 수 있습니다.

기간 지연 작업 식별자 명령

14 15 test.daily /path/to/script.sh


불행히도 anacron을 사용할 수 없습니다. 언급하는 것을 잊었다.
— Roman

1

2 주에 한 번만 필요한 것이 아니라면 매월 1 일과 15 일에 크론 작업을 실행할 수 있습니다.

15 8 1,15 * * /your/script.sh

요일에 관계없이 매월 1 일과 15 일 오전 8시 15 분에 실행됩니다.


-2

그 주에서 3/2의 설명 설정에서 다른 모든 수요일에 작업을 실행해야합니다. 내재적이지만 가능하다고 생각합니다.


아니요, 이것은이 for(int i=3; i <=3 ; i+=2) {} 과정이 한 번만 진행되므로 "단계"가 1 또는 2인지는 중요하지 않습니다.
— stew

@stew가 말한 것. 또한 "주 필드"는 없습니다.
— Roman

주 필드, "주일 필드"를 의미
— Journeyman Geek
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.