2013-05-02 4 views
0

기본적으로 나는 일주일에 한 번씩 달리기를 원한다. 일요일마다 스크립트를 실행하도록 cron 작업을 설정하면이 스크립트는 스크립트가 수 주일 만 실행되도록 허용하므로 다른 일요일마다 실행됩니다. 내 질문은,이 스크립트는 여전히 매년 갈 것입니다.이 코드는 새해에 작동합니까?

if [ $(($(date +'%U') % 2)) -eq 0 ] 
then 
    some command 
fi 
+4

테스트 해 보셨습니까? 컴퓨터 시뮬레이션을 위해 컴퓨터 시계를 변경할 수 있습니다. – JohnFx

+1

시계를 변경할 필요가 없습니다. '-d'를 사용하여 날짜를 지정할 수 있습니다. – paddy

+0

cron에 "격주로"쓸 수 있습니다. 여기 [한 쌍의 접근법] 참조 (http://stackoverflow.com/questions/350047/how-to-instruct-cron-to-execute-a-job-every-second-week) –

답변

2

여기에 the XY problem이 있습니다.

쉘 스크립트의이 부분에 문제가있어서 스크립트를 수정하여 문제를 해결하려고합니다. 현실적으로 문제의 근본 원인을 수정하는 것이 더 쉽습니다.

단순히 다른 모든 일요일을 실행하도록 cron 작업을 변경 :

#----+-----+-----+-----+-----+------------------------------------------------- 
#min |hour |day |month|day |command 
# |  |of mn|  |of wk| 
#----+-----+-----+-----+-----+------------------------------------------------- 
03 04 *  *  7  expr `date +%W` % 2 >/dev/null || fortnightly.sh 

더 많은 정보를 원하시면 How to instruct cron to execute a job every second week?를 참조하십시오.

1

cron 구문으로 지정하지 않으려면 %U 대신 %s 형식을 사용할 수 있습니다. 이것은 UTC 1970 년 1 월 1 일 이후의 초 수를 알려줍니다. 이것을 나누어 주 번호를 얻을 수 있습니다.

$(($(date +'%s')/604800)) 

그런 다음 모듈러스 테스트를 수행 할 수 있습니다.

숫자 604800 = 7 * 86400 = 7 * 24 * 60 * 60즉,의 1 주일의 초 수를 확인하십시오.

매일 실행하면 실제로 일요일임을 알 수 있습니다. 따라서이 경우 86400으로 나눠서 하루 번호를 얻으십시오. 그런 다음, 제로 데이가 목요일이라는 지식으로 무장 한 당신은 당신이 시작한 일요일에 따라 결과 (모듈 14)가 3 또는 10인지 점검 할 수 있습니다.

관련 문제