특정 날짜를 제외하는 크론을 어떻게 작성합니까?
가설: 주말 오후 6시부터 오후 9시까지 30분마다 crontab을 실행해야 하며 2014년 5월 10일만 제외하고 싶습니다.
가능합니까? 이건 어떻게 써야 하나요? 아니면 대안이 있나요? 제안해주세요.
답변1
표준 cron 구문은 매우 간단하며 제외를 지원하지 않습니다. 경우에 따라 이러한 논리를 구현하기 위해 여러/여러 cron 항목 목록을 생성할 수 있지만 이는 종종 지루하고 이해하거나 유지 관리하기 어렵지만 이 접근 방식은 귀하의 경우에는 작동하지 않습니다(특히 표준 cron이 있기 때문에). 달력상의 연도 개념 없음).
cron 명령을 복잡하게 만드는 것은 좋은 계획은 아니지만 다음과 같은 비교적 간단한 방법을 사용하여 수행할 수 있습니다.
0,30 18-20 * * sat,sun [ "$(date +\%Y\%m\%d)" = "20140510" ] || mycommand
0 21 * * sat,sun [ "$(date +\%Y\%m\%d)" = "20140510" ] || mycommand
(" 0,30 18-21
"를 사용하면 작업이 21:30에도 실행됩니다. 21:00에도 실행하려면 두 번째 줄이 필요합니다. 그렇지 않은 경우 무시하세요.)
참고: 에일부 크론탭Dillon의 cron에서는 그렇지 않지만 백분율 기호(명령의 표준 입력에 인라인 데이터를 채울 때 줄 바꿈을 나타내는 데 사용됨)를 이스케이프해야 합니다.
cron 명령은 실제로 쉘입니다명령 목록, ||
제어 연산자는 다음을 제공합니다.단락 평가주문하다. 목록의 명령은 왼쪽에서 오른쪽으로 한 번에 하나씩 시도되지만 첫 번째 명령이 true를 반환하면 실행이 중지됩니다. 날짜 문자열 비교가 true(하루 동안만 true)를 반환하면 실행되지 않고 mycommand
, 날짜 비교가 false를 반환하면 실행됩니다 mycommand
.
그러나 cron이 프로그램을 시작하는 방법에는 여러 가지가 있습니다. 가장 안정적인 방법은 래퍼 스크립트를 사용하여 조건부 논리를 구현하는 것입니다.
답변2
X-Y
시간 간격과 빈도를 사용할 수 있습니다 */Z
. 어디:
X
간격의 시작입니다.Y
간격의 끝입니다.Z
단 하나의 제수(예: 각각Z
).
특정 날짜를 제외하려면 나만의 스크립트를 작성하면 됩니다. 이 스크립트에서 날짜를 확인한 후 다음 지침을 실행할지 결정하세요.