2주마다 크론 작업이 실행되도록 예약할 수 있나요?

2주마다 크론 작업이 실행되도록 예약할 수 있나요?

2주마다 실행되도록 크론 작업을 예약하는 방법이 있습니까?

(내가 생각할 수 있는 한 가지 방법은 crontab두 개의 "날짜" 항목을 추가하는 것입니다...)

답변1

아니요, cron은 요일, 1월의 날짜, 월만 알고 있습니다.

한 달에 두 번 고정된 날짜(예: 1일과 16일)에 명령을 실행하는 것은 쉽습니다.

42 4 1,16 * *  do_stuff

격주로 명령을 실행하는 것은 또 다른 이야기입니다. 당신이 할 수 있는 최선의 방법은 매주 명령을 실행하고 격주로 아무 일도 하지 않게 하는 것입니다. Linux에서는 에포크( ) 이후의 초 수를 date +%s주당 초 수로 나누어 주간 롤오버 패리티 수치를 얻을 수 있습니다. crontab에서는 %이스케이프가 필요합니다(cron은 %명령을 실행하기 전에 줄바꿈이 됩니다).

42 4 * * 1  case $(($(date +\%s) / (60*60*24*7))) in *[02468]) do_stuff;; esac

답변2

cron2주마다(2주마다) 작업을 직접 실행할 수는 없습니다 . 그러나 작업의 주요 부분이 격주로 실행되도록 하는 것은 매우 간단합니다. @Gilles는 하나의 솔루션을 제공했습니다. 여기에 또 다른 솔루션이 있습니다.

42 4 * * 1    test 1 -eq $(($(date +\%g) & 1)) && do_stuff...

date +%g명령은 현재 주 수(연도의 주 수)를 반환하고 비트 AND 연산은 1 또는 0을 반환합니다. 그런 다음 실제 작업을 실행할 수 있는지 여부를 결정하는 데 사용됩니다.

백분율 기호에 대한 동일한 경고 %: 특별하게 취급되지 crontab않도록 항목 내에서 이스케이프해야 합니다 .cron

답변3

파티에 늦었다는 건 알지만, 모두들 문제에 대한 한두 가지 해결책을 원합니다...

일요일을 제외하고 OP와 동일한 작업을 수행하고 싶어서 이 게시물을 발견했습니다.

@user140906은 이 코드 조각을 실행할 때 관찰할 수 있는 유효한 우려 사항을 가지고 있습니다.

for n in $(seq 17 33); do ncal -A1 -bw dec 20${n}; done

처음에는 6년마다 반복되는 것 같았습니다. 모두 확인하지는 않았습니다! :-)

그러다가 이걸 발견했어요협회이는 작동해야 하는 @gilles-so-stop-being-evil과 유사한 두 가지 솔루션을 제공하며, 가장 확실한 솔루션은 다음과 같습니다.

#!/bin/bash

# a file marking the state on disk
mark_file=$HOME/.job-run-marker-1

# check whether the job run last time it is invoked
if [ -e $mark_file ] ; then
  rm -f $mark_file
else
  touch $mark_file
  exit 0
fi

# job command is here

예를 들어 crontab 항목을 추가하십시오.

0 2 * * 2 my_script

여러 항목과 함께 사용하도록 쉽게 조정할 수 있습니다 ( 하드코딩 대신 crontab값 전달 ). 또는 일부 마법을 사용하여 동일한 논리 mark_file를 // 확장하여 파일의 ID 및 상태/각각을 나타내는 /제거/추가 줄을 추가합니다 . 작업이 실행되었습니다.IDgrepawksed

어쨌든, 이것이 누군가에게, 어쩌면 미래에 나에게도 도움이 되기를 바랍니다!

관련 정보