31은 반드시 크론 작업에서 월말을 의미합니까?


13

cron 작업의 경우 다음과 같이 시간을 설정할 수 있습니다.

# +------------ Minute (0 - 59)
# | +---------- Hour (0 - 23)
# | | +-------- Day of the Month (1 - 31)
# | | | +------ Month (1 - 12)
# | | | | +---- Day of the Week (0 - 7) (Sunday is 0 or 7)
# | | | | |
# * * * * * command

내가 알고 싶은 것은 우리가 31 일의 날을 설정할 때, 그 달에 31 일이 없는데도 매월 말을 의미한다는 것입니다. 답을 얻을 수 있기를 바랍니다.

미리 감사드립니다

답변:


22

아니요, 31은 31을 의미합니다.

그러나 약간의 속임수를 쓸 수 있습니다. 잠재적으로 해당 월의 마지막 날 (예 : 월-일 필드에서 28-31 일 수 있음)에 작업이 실행되도록 설정 한 다음 명령을 명령:

0 0 28-31 * * [ "`date +%m`" != "`date --date=tomorrow +%m`" ] && command

테스트 괄호 안의 표현식은 오늘의 월 번호가 내일의 월 번호와 다른지 묻습니다. 물론 해당 월의 마지막 날에만 적용됩니다. 이 표현의 형식은 지역에 따라 다릅니다 date. 현재 GNU 버전이 없으면 수정해야 할 수도 있습니다.

나는 이것을 발명하지 않았다고 말해야한다-Matthew Jarvis의 메일 링리스트 게시물에서 빠른 Google로 찾았습니다. 그러나 이것이 표준 표준 유닉스 마법사의 트릭이라고 생각합니다.


1
"date"=)라는 GNU 고유의 옵션이 주어지면 너무 트릭이 될 수 없습니다.
jj33

4
stackexchange 사이트에서 Google 검색으로 답변 할 수있는 질문을하는 것은 나쁘지 않습니다. 사실 구글에서 이것을 검색 할 다음 사람이 stackexchange에 대한 답을 찾고 여기에 올 것이기 때문에 좋은 일입니다.
miernik

12

아니요, 당신이 할 수있는 최선의 방법은 매월 1 일 자정에 실행하거나 매월 개별 crontab 라인을 설정하는 것입니다 (또는 적어도 28,29,30 및 31 일이있는 달의 라인).

0 0 28,29 2               * /my/command
0 0 30    4,6,9,11        * /my/command
0 0 31    1,3,5,7,8,10,12 * /my/command

고마워 폴! 나는 두 번째를 따를 것입니다. 두 번째 방법으로 같은 파일을 세 번 올바르게 설정해야합니까? 다시 한번 감사드립니다 :)

예, 반복해야합니다.
Paul Dixon

7
나는 cron에 대한 경험이 없지만 윤년에 "0 0 28,29 2"를 두 번 실행하지 않습니까? 이것이 향후 2 년간 문제가되지는 않지만 여전히 ...
Wim ten Brink

좋은 지적입니다. 쉬운 방법은 아닙니다
Paul Dixon

4

나는 당신이 이것을 쉽게 할 수 있다고 생각하지 않습니다 crontab.

한 가지 옵션은 cron매일 스크립트를 실행 하도록 설정 한 다음 스크립트가 해당 월의 마지막 날인지 확인하도록하는 것입니다.


3

cron에는이 목적을위한 특수 문자 'L'이 있습니다.

*    *    L    *    *    your_script.sh 

매월 마지막 날에 스크립트를 실행합니다

반면에

*    *    0    *    *    your_script.sh

다음과 같이 지정할 수도 있습니다.

*    *    *    *    1,5L    your_scrript.sh

매월 마지막 월요일과 금요일에 스크립트를 실행

또는

*    *    *    *    1    your_script.sh

매주 월요일 자정에 스크립트를 실행합니다.


0

이것은 일을 할 것입니다 :

if [ $( date +%-d --date="tomorrow" ) -eq 1 ]
then echo Last day of the current month
else echo Not yet!
     exit 0
fi

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