소개
Crontab을 이용하여 조금 복잡한 스케줄링을 만들어 사용을 해보았습니다. 매월 마지막 금요일에 원하는 job을 돌려보기 위한 설정을 정리해보려 합니다. 해당 방법을 응용하면 다양한 Crontab 설정이 가능하지 않을까 생각합니다.
기본적인 Crontab 사용방법
# 기본 문법
분(0-59) 시(0-23) 일(1-31) 월(1-12) 요일(0-7(일요일=0, 월요일=1)) [실행하고자 하는 명령어]
# 예제 - 금요일 11:00 마다 "hello" 출력
0 11 * * 5 echo "hello"
매월 마지막 금요일 원하는 job 실행 설정
# 매월 마지막주 금요일 11시에 echo "hello" 실행
0 11 * * 5 [ $(date +"\%m") -ne $(date -d 7days +"\%m") ] && echo "hello"
기본적인 베이스는 &&(AND) 연산자를 이용하는 것입니다. && 연산자는 앞의 연산이 참일 경우에만 뒤의 연산이 이루어지는 논리 연산자입니다.
그래서 위의 명령어 부분에서는,
[ $(date +"\%m") -ne $(date -d 7days +"\%m") ]
해당 구문이 참이 되어야 뒤의 echo 문이 실행되게 되는 것입니다.
해당 구문을 또다시 상세 분석해보면,
# 크론탭 돌아가는 해당 날짜의 월과 7일 이후 날짜의 월과 동일하지 않다면 true
[ $(date +"\%m") -ne $(date -d 7days +"\%m") ]
# 세부 구문 분석
$(date +"\%m") : 크론탭 돌아가는 해당 날짜의 월
-ne : not equal 동일하지 않다면 true
$(date -d 7days +"\%m") : 7일 후의 월
명령어가 실행되는 날짜의 월과 7일 후 날짜의 월과 동일하지 않다면(마지막주의 요일이라는 의미) true 를 반환하게 되어 && 뒤의 명령어가 실행되게 됩니다.
결론
&& 논리 연산자를 이용하면 좀더 복잡한 스케줄링과 함께 원하는 명령어를 실행시키도록 설정을 할 수 있을 것같습니다.