cronjob의 일정을 확인하고 특정 부분에 대한 상태 확인을 수행합니다.

cronjob의 일정을 확인하고 특정 부분에 대한 상태 확인을 수행합니다.

편집하다:나는 이것을 스스로 알아낼 수 있었고 프로세스가 약간 복잡했기 때문에 실제로 원래 질문을 삭제했지만 다른 사람이 유용하다고 생각할 경우를 대비하여 나중에 답변했습니다. RegExp는 주로 숫자 기반 결과를 처리하므로 이 경우 필요하지 않습니다.

원래 질문:

write_cronjob()전달된 작업이 이미 존재하는지 확인하거나 grep 기준에서 일치하는 항목을 찾지 못하면 crontab에 쓰는 기능이 있습니다 .

일부 네트워크 제한으로 인해 cronjob은 특정 창에서만 예약될 수 있습니다. 사용자는 일정을 자유롭게 설정할 수 있으므로 정의된 창 밖에서 예약을 시도하는 작업은 실행되지 않으므로 스크립트는 이를 감지해야 합니다.

이 함수에는 두 가지 매개변수가 있습니다.

  • $1- cron 계획만 포함합니다.0 19 * * 3
  • $2- 실행할 작업/명령이 포함되어 있습니다.

필요한 경우 쓰기 작업 전에 병합됩니다.

크론 예약 규칙은 다음 기준을 충족해야 합니다.

  • 월요일~금요일(평일)
  • 오전 7시(오전 07:00) - 오후 10시(오후 22:00)

낮 부분에 대한 범위 확인을 하려고 생각 중인데 시간 부분은 24시간제(22 = 오후 10시)를 사용하여 좀 더 어렵습니다.

내 요구 사항은 다음과 같습니다

  1. $1조건부 확인을 위해 cronjob의 시간 및 날짜 부분을 선택하도록 분할할 수 있습니다 .
  2. RegExp 모드/범위는 분할된 부분을 확인하여 기준을 벗어나는지 감지하고 exit 1그에 따라 확인합니다.

노트:

내 쉘은 ash(BusyBox)이고 배열을 사용할 수 없습니다.

답변1

$1awk를 사용하여 시간과 날짜 부분을 분할하고 추출 할 수 있습니다 . 기본 구분 기호는 공백이므로 cronjob 시간 값을 잘 분할합니다.

다음 에 대한 예시 값 $1:0 19 * * 1-5

CRONJOB_HOUR=$(echo "$1" | awk '{ print $2 }') # Second position: 19
CRONJOB_DAY=$(echo "$1" | awk '{ print $5 }') # Fifth position: 1-5

이러한 부분을 변수에 넣어 조건부 검사를 수행할 수 있습니다.

첫 번째 확인은 범위를 생성하기 위한 확인보다 작거나 큼입니다.

if [ "${CRONJOB_HOUR}" -lt 7 ] || [ "${CRONJOB_HOUR}" -gt 22 ] ; then
    echo "Cronjob cannot be scheduled within specified hour"
    exit 1
fi

두 번째 조건은 1-6과 같은 값을 캡처하는 대신 일치를 기준으로 수행됩니다.

if [[ "${CRONJOB_DAY}" == *"6"* ]] || 
[[ "${CRONJOB_DAY}" == *"7"* ]] 
then
    echo "Cronjob cannot be set to run at weekends"  
    exit 1
fi

관련 정보