it-swarm-ko.tech

격주로 크론을 통해 스크립트 실행

이 작업을 수행하는 방법에 대해 꽤 많은 연구를 수행했으며, 격주 목요일과 같이 cron에서 작업을 실행하는 직접적인 방법이 없다는 것을 알았습니다.

지금은 every 매주 실행되는 스크립트를 만들고 실행될 때 "플래그"파일을 터치하고 실행되고 파일이 이미 존재하는 경우 제거하는 파일 (격주 작업을 수행하지 않음).

내 질문은 격주로 자동으로 실행되는 작업의 bash 스크립트 목표를 달성하는 더 우아하고 간단한 방법이 있습니까?

감사!

12
dmkmills
0 0 * * Thu bash -c '(($(date +\%s) / 86400 \% 14))' && your-script

나는 게으 르기 때문에 수학을하기 위해 bash를 사용했다. 원하는대로 변경하세요. 나는 1970 년 1 월 1 일이 목요일이라는 것을 이용합니다. 다른 요일에는 오프셋을 적용해야합니다. Cron은 퍼센트 기호를 이스케이프해야합니다.

빠른 확인:

function check {
  when=$(date --date="$1 $(($RANDOM % 24)):$(($RANDOM % 60))" --utc)
  echo -n "$when: "
  (($(date +%s --date="$when") / 86400 % 14)) && echo run || echo skip
}

for start in "2010-12-02" "2011-12-01"; do
  for x in $(seq 0 12); do
    check "$start + $(($x * 7)) days"
  done
  echo
done

내가 임의의 시간을 선택하여 목요일에 실행하면 이것이 작동한다는 것을 보여주고 연도 경계를 넘어서 4 일과 5 일 목요일이있는 월을 포함하는 날짜를 선택했습니다.

산출:

Thu Dec  2 06:19:00 UTC 2010: run
Thu Dec  9 23:04:00 UTC 2010: skip
Thu Dec 16 05:37:00 UTC 2010: run
Thu Dec 23 12:49:00 UTC 2010: skip
Thu Dec 30 03:59:00 UTC 2010: run
Thu Jan  6 11:29:00 UTC 2011: skip
Thu Jan 13 13:23:00 UTC 2011: run
Thu Jan 20 20:33:00 UTC 2011: skip
Thu Jan 27 16:48:00 UTC 2011: run
Thu Feb  3 17:43:00 UTC 2011: skip
Thu Feb 10 05:49:00 UTC 2011: run
Thu Feb 17 08:46:00 UTC 2011: skip
Thu Feb 24 06:50:00 UTC 2011: run

Thu Dec  1 21:40:00 UTC 2011: run
Thu Dec  8 23:24:00 UTC 2011: skip
Thu Dec 15 22:27:00 UTC 2011: run
Thu Dec 22 02:47:00 UTC 2011: skip
Thu Dec 29 12:44:00 UTC 2011: run
Thu Jan  5 17:59:00 UTC 2012: skip
Thu Jan 12 18:31:00 UTC 2012: run
Thu Jan 19 04:51:00 UTC 2012: skip
Thu Jan 26 08:02:00 UTC 2012: run
Thu Feb  2 17:37:00 UTC 2012: skip
Thu Feb  9 14:08:00 UTC 2012: run
Thu Feb 16 18:50:00 UTC 2012: skip
Thu Feb 23 15:52:00 UTC 2012: run
11
Roger Pate

한 가지 방법은 Linux를 실행하는 경우 at 유틸리티를 사용하는 것입니다. 이것을 스크립트 끝에 넣을 수 있습니다.

at X + 2 weeks -f myscript

여기서 X 는 스크립트를 실행할 시간입니다. 초기화하려면 처음 실행할 시간 동안 at를 호출하면 위의 명령문이 예약 된 호출을 계속 갱신합니다.

5
gvkv

시스템에서 anacron 를 사용할 수 있다면 일이 훨씬 더 간단 해집니다. anacron을 (를) 사용하려면 설치되어 있어야하며 루트 액세스 권한도 있어야합니다. 이전 시스템 (예 : RHEL 5.x)에서는 작동하지 않으며 이전 버전의 ancron은 부팅시에만 실행됩니다. 최신 시스템 (예 : RHEL 6.x)에서 작동합니다.

anacron을 사용하면보다 유연한 방식으로 작업을 예약 할 수 있습니다. 일주일에 한 번 X 작업을 실행합니다. 또한 anacron는 컴퓨터를 사용할 수있게되면 작업을 실행합니다. 즉, 시스템이 작동 중이거나 중지 된시기를 고려할 필요가 없습니다.

격주로 스크립트를 실행하려면/etc/anacrontab에 다음과 유사한 행을 추가해야합니다.

14 5 myScript script.sh

자세한 내용은 man 페이지를 참조하십시오.

3
memin

매주 실행하고 스크립트에서 주 번호가 홀수인지 확인하도록합니다. 그렇다면 종료합니다.

12 월부터 1 월까지 작동하려면 더 많은 생각이 필요합니다.

스크립트가 "마지막으로 성공한 실행"플래그 파일을 설정했을 수 있습니다. 스크립트가 시작되면 플래그 파일이 14 일 전에 마지막으로 수정되었는지 확인합니다.

0
glenn jackman