crontab scripts 적용 질문입니다.

zig1226의 이미지

목적은 매월 둘째주 1시에 /var/log/messages 파일을 /backup 디렉토리에 저장하는 것입니다

crontab -e 명령으로
0 1 7 * 2 sh /cron.sh 이런식으로 작성하였고

cron.sh 스크립트로는
#!/bin/bash
backup_dir="/cronbackup"
i=cal | awk '{print $7}' | sed 1,2d
if ( $i >= '8' || $i <= '14' )
then
echo "$i" >> /var/log/messages
fi

허접하게 작성하였는데... 이게 틀린건 확실한데 어디를 건드려야될지 모르겠습니다..
조언좀 부탁드립니다.

zig1226의 이미지

요일은 토요일입니다.

chanik의 이미지

참고: http://stackoverflow.com/questions/3241086/cron-how-to-schedule-to-run-first-sunday-of-every-month

실행할 스크립트의 이름이 rotate_messages.sh 라고 하면, crontab에 아래와 같은 엔트리가 들어가게 하면 될 겁니다.

# 매월 2번째 토요일 01시
0 1 * * 6   [ $(date -d "-1 week" +\%d) -le 07 ] && /path/to/rotate_messages.sh

이 날이 두 번째 토요일이 맞는지의 판단은 스크립트 실행 전에 끝난 상태이므로 rotate_messages.sh 안에서는 따로 확인하지 않아도 됩니다. 확인방식은 (당일 - 1주일)의 날짜가 1 ~ 7일 범위에 있는지를 보는 것입니다.

좀 응용해서 2, 4번째 토요일마다 실행되게 하려면 아래와 같이 하면 되겠죠.

# 매월 2,4번째 토요일 01시
0 1 * * 6   [ $(date -d "-1 week" +\%d) -le 07 -o $(date -d "-3 week" +\%d) -le 07 ] && /path/to/rotate_messages.sh