특별한 조건으로 크론 작업 예약

특별한 조건으로 크론 작업 예약

특별한 상황으로 인해 크론 작업 일정을 자동으로 변경하는 방법이 있습니까?

간단한 예를 들자면, 휴일 동안 급여 처리는 cron에서 계획된 것보다 하루 늦게 실행되어야 합니다.

스크립트, 구성, 환경 변수를 통해 이를 달성할 수 있습니까? 아니면 누군가 수동으로 변경해야 합니까?

답변1

이것은 cron이 지원하는 것이 아닙니다. 그러나 문제를 해결하기 위해 스크립트를 만드는 것은 가능합니다.

귀하의 예를 살펴보면 프로세스가 실행되어야 하는 날짜를 저장하는 일종의 의제/목록이 있어야 합니다.

그런 다음 매일 스크립트를 실행하여 일정/목록의 날짜가 일치하는지 확인하는 crontab 항목을 만들어야 합니다. 그렇지 않다면 아무것도 하지 마십시오. 그러나 일치하는 항목이 있으면 프로세스가 시작됩니다.

답변2

간단한 경우에는 그렇습니다. 그러나 다소 복잡한 경우에는 급여 작업에 대한 래퍼 스크립트를 작성해야 합니다.

예를 들어 크론 작업은 급여 핸들러를 직접 실행할 필요가 없습니다. 래퍼 스크립트를 통해 실행할 수 있습니다(아직 실행하지 않았다면 실행해야 합니다).

예를 들어 "myjob.sh"라는 스크립트는 다음과 같습니다.

#!/bin/bash

delayfile=/path/to/myjob.delay

if [ -e "$delayfile" ] ; then
  sleep $(cat "$delayfile)
  rm "$delayfile"
fi

# now set up whatever variables etc are needed and
# execute the actual payroll processing program

지연을 위해다음(그리고 다음 번에만) 하루 동안 cron 작업을 실행한 후 다음과 같이 간단히 실행할 수 있습니다(셸에서 해당 디렉터리에 파일을 생성할 수 있는 권한이 있는 사용자로).

echo 86400 > /path/to/myjob.delay

위의 스크립트 조각은 cron 작업이 매일 실행되지 않는다고 가정합니다. 만약 그렇다면 다음 인스턴스는 절전 모드가 끝나는 동시에 실행됩니다.

작업이 매일 실행되는 경우 다음을 수행할 수 있습니다.

#!/bin/bash

skipfile=/path/to/myjob.skip

if [ -e "$skipfile" ] ; then
  rm "$skipfile"
  exit 0
fi

# now set up whatever variables etc are needed and
# execute the actual payroll processing program```

건너뛰기 파일이 존재하는 경우(예: touch /path/to/myjob.skip셸에서 실행 중인 경우) 스크립트는 해당 파일을 삭제하고 즉시 종료됩니다. 다음 cron 작업 실행은 정상적으로 완료됩니다.

이것들은 모두매우 간단하다예를 들어, 가능성에 대한 가장 간단한 아이디어를 제공합니다. 스크립트는 조건 확인, 필요한 만큼 복잡함, 외부 프로그램 실행, 데이터베이스 항목 조회, 원격 웹 서버의 json API 쿼리 등에 필요한 모든 작업을 수행할 수 있습니다.

cron 자체에서는 상대적으로 간단한 작업을 수행할 수 있습니다. 예를 들어 위의 작업은 cron에서 수행할 수 있을 만큼 충분히 간단합니다.

주간판:

00 01 * * 7 [ -e /path/to/myjob.delay ] && sleep $(cat /path/to/myjob.delay) && rm /path/to/myjob.delay && your-payroll-program

일일 버전:

00 01 * * * [ -e /path/to/myjob.skip ] && (rm /path/to/myjob.skip && exit 0) || your-payroll-program

제 생각에는 래퍼 스크립트를 사용하는 것이 더 나을 것 같습니다. 읽기도 쉽고, 유지 관리도 더 쉽고, sh나 bash뿐만 아니라 원하는 스크립트 언어도 사용할 수 있습니다. 또한, 논리적으로 동일한 일련의 -ed/or-ed 절에서 합리적으로 수행할 수 있는 작업에는 한계가 있으며, 한 줄이 이해할 수 없는 횡설수설로 바뀌기 전에 합리적으로 수행할 수 있는 작업에도 제한이 있습니다. 스크립트에서 건너뛰기와 지연 기능을 결합하는 것은 매우 쉽지만 한 줄이나 crontab 항목으로 수행하기는 더 어렵습니다.

관련 정보