crontab은 특정 날짜만 제외합니다

crontab은 특정 날짜만 제외합니다

특정 날짜를 제외하는 크론을 어떻게 작성합니까?

예를 들어, 주말에 오후 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는 단지 제수일 뿐입니다(예: Each Z).

날짜를 제외하려면 나만의 스크립트를 작성하면 됩니다. 이 스크립트 내에서 날짜를 확인한 후 다음 명령을 실행할지 결정하십시오.

관련 정보