저는 이 작업을 수행하는 방법에 대해 많은 연구를 수행했으며, 예를 들어 격주 목요일마다 cron에서 작업을 실행하는 직접적인 방법이 없다는 것을 발견했습니다.
이제 저는 실행할 스크립트를 만드는 쪽으로 기울고 있습니다.모든주에 실행되고 실행될 때 "플래그" 파일에 닿습니다. 실행되고 파일이 이미 존재하는 경우 파일을 삭제합니다(격주 작업을 수행하지 않음).
내 질문은 격주마다 bash 작업 스크립트를 자동으로 실행한다는 목표를 달성하는 더 우아하고 간단한 다른 방법이 있습니까?
감사해요!
답변1
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
답변2
at
Linux를 실행 중인 경우 이 유틸리티를 사용하는 것이 한 가지 방법일 수 있습니다. 스크립트 끝에 다음을 넣을 수 있습니다.
at X + 2 weeks -f myscript
어디엑스스크립트를 실행하려는 시간입니다. 초기화하려면 at
처음으로 실행하려는 시간을 호출하면 위의 명령문이 일정 호출을 계속 업데이트합니다.
답변3
당신이 사용할 수 있다면anacron
시스템에서는 상황이 훨씬 간단합니다. 사용하려면 anacron
설치해야 하며 루트 액세스 권한이 있어야 합니다. 이전 시스템(예: RHEL 5.x)에서는 작동하지 않으며, 이전 버전의 ancron은 부팅 시에만 실행됩니다. 최신 시스템(예: RHEL 6.x)에서는 작동합니다.
이렇게 하면 anacron
X 작업을 일주일에 한 번 실행하는 등 보다 유연한 방식으로 작업을 예약할 수 있습니다. 컴퓨터를 사용할 수 있을 때에도 작업이 실행 됩니다 anacron
. 즉, 시스템이 언제 시작되거나 종료되는지 생각할 필요가 없습니다.
격주로 스크립트를 실행하려면 /etc/anacrontab에 다음과 유사한 줄을 추가해야 합니다.
14 5 myScript script.sh
자세한 내용은 매뉴얼 페이지를 참조하십시오.
답변4
격주를 정의하는 더 우아한 방법이 있는지는 확실하지 않지만 이것이 당신에게 도움이 될 수 있습니다.
00 06 1-7,15-21 * * test `date +\%a` = Thu && /path/to/script
매월 첫째, 셋째 목요일 오전 6시에 스크립트가 시작됩니다.