Crontab 개선 사항[닫기]

Crontab 개선 사항[닫기]

내 crontab에는 31개의 cronjob이 있고 처음 7개의 cronjob이 완료된 후 매주 날짜를 변경합니다. 이러한 수작업을 줄이는 다른 방법이 있습니까?

저는 각 cronjob에 대해 특정 날짜를 설정하려고 합니다. 예를 들어:15 00 1,12,22 * * ....

이것이 좋은 선택입니까? 내 작업을 개선하려면 몇 가지 제안이 필요합니다.

감사해요.

편집: 하루에 3번, 매주 31개의 테스트를 실행하고 싶습니다. 아래 이미지는 처음 21개 테스트에 대해 cronjob을 설정하는 방법을 보여줍니다.

00 00 * * 1 test run 1
00 09 * * 1 test run 2
00 17 * * 1 test run 3
00 00 * * 2 test run 4
00 09 * * 2 test run 5
00 17 * * 2 test run 6
00 00 * * 3 test run 7
00 09 * * 3 test run 8
00 17 * * 3 test run 9
00 00 * * 4 test run 10
00 09 * * 4 test run 11
00 17 * * 4 test run 12
00 00 * * 5 test run 13
00 09 * * 5 test run 14
00 17 * * 5 test run 15
00 00 * * 6 test run 16
00 09 * * 6 test run 17
00 17 * * 6 test run 18
00 00 * * 7 test run 19
00 09 * * 7 test run 20
00 17 * * 7 test run 21

일요일에는 나머지 시범 운영 등의 일정을 계획하겠습니다.

00 00 * * 1 test run 22
00 09 * * 1 test run 23
00 17 * * 1 test run 24
00 00 * * 2 test run 25
00 09 * * 2 test run 26
00 17 * * 2 test run 27
00 00 * * 3 test run 28
00 09 * * 3 test run 29
00 17 * * 3 test run 30
00 00 * * 4 test run 31
00 09 * * 4 test run 1
00 17 * * 4 test run 2
00 00 * * 5 test run 3
00 09 * * 5 test run 4
00 17 * * 5 test run 5

# (etc.)

답변1

특정 시작 시간에 연속으로 31개의 테스트를 반복하려면 스크립트를 사용하여 다음에 실행할 작업을 추적하고 파일의 시퀀스 번호를 사용하면 됩니다.

단일 영구 crontab 항목을 사용하여 모든 시간을 지정합니다. 예:

0 0,9,17 * * * /home/paul/JobRotate >> /home/paul/JobRotate.log 2>&1

다음은 최신 작업 번호를 .seq 파일에 저장하고, 존재하지 않는 경우 생성하는 샘플 스크립트입니다.

#! /bin/bash --
#.. This is /home/paul/JobRotate.
fn="/home/paul/JobRotate.seq"
[[ -r "${fn}" ]] && read -r Seq < "${fn}"
(( ++Seq ))
printf '%d\n' $(( Seq % 31 )) > "${fn}"
/home/paul/kJob_${Seq}

이는 작업 테스트 스크립트의 예입니다.

#! /bin/bash --
printf '%s\n' "I am kJob_17" >> /home/paul/JobRotate.log

전체 경로 이름을 사용하십시오. cron은 로그인하지 않으므로 프로필(PATH 포함)이 활성화되지 않습니다. 가혹한 환경: 이것은모두cron은 나에게 기본 로그인 쉘도 제공하지 않았습니다.

LANGUAGE=en_GB:en
HOME=/home/paul
LOGNAME=paul
PATH=/usr/bin:/bin
LANG=en_GB.UTF-8
SHELL=/bin/sh
PWD=/home/paul

"테스트 실행 x" 이름이 표시된 것처럼 표준이 아닌 경우 인덱스 배열 또는 쉘 케이스 문을 사용하여 매핑하거나 소프트 링크를 통해 액세스할 수 있습니다.하다정식 이름을 가지세요.

답변2

Paul의 의견에 따르면 1부터 31까지 반복되는 래퍼 스크립트를 만들 수 있습니다. 될 cron것입니다:

0 0,9,17 * * * wrapper_script

스크립트 자체는 다음과 같습니다.

#!/bin/bash
a=$(cat /tmp/var_)||exit 1
b=$(( ($a)%31+1 ))
run_script $b
echo $b>/tmp/var_

/tmp/var_스크립트를 처음 사용하기 전에 변수를 초기화하는 것을 잊지 마세요.

관련 정보