2016년 3월 2일 수요일

리눅스 반복 예약작업 cron crontab

리눅스 서버에서 특정 프로세스나 스크립트를 원하는 시간에 수행하기를 원할때 사용되는 데몬(crond)이다.

크론탭(crontab)은 스케줄러이다. /etc/crontab 파일에서 직접볼 수도 있다.

▶ 현재사용자 스케줄러 보기
# crontab -l

▶ 현재사용자 스케줄러 삭제
# crontab -r

▶ 현재사용자 스케줄러 등록
# crontab -e
작성은 vi 편집기와 동일하다.

crontab -e 명령어로 직접 등록할 수도 있지만 아래 디렉토리에 직접 파일을 생성해줘도 된다.

/etc/cron.d
여기에 아래의 작성방법대로 직접 파일을 생성해 놓으면 크론데몬이 알아서 수행해준다.
/etc/cron.daily
이 디렉토리는 매일 수행이 필요한 폴더이다. 쉘스크립트로 작성하여야 한다.
/etc/cron.hourly
이 디렉토리는 매시간 수행이 필요한 폴더이다. 쉘스크립트로 작성하여야 한다.
/etc/cron.monthly
이 디렉토리는 매월 수행이 필요한 폴더이다. 쉘스크립트로 작성하여야 한다.
/etc/cron.weekly
이 디렉토리는 매주 수행이 필요한 폴더이다. 쉘스크립트로 작성하여야 한다.

작성방법은 아래와 같이 하면 된다. crontab 또는 /etc/cron.d 에만 해당된다.
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name command to be executed
첫번째 : 분
두번째 : 시
세번째 : 일
네번째 : 월
다섯째 : 요일
여섯째 : 수행할 유저아이디
일곱째 : 수행할 명령어 또는 스크립트파일

아래는 root계정 기준 작성법이다.
일반사용자 계정은 유저아이디 부분은 입력하지 않아도 된다.

▶ 1분 간격으로 실행
* * * * * 유저아이디 명령어

▶ 홀수분 간격으로 실행
1-59/2 * * * * 유저아이디 명령어

▶ 짝수분 간격으로 실행
*/2 * * * * 유저아이디 명령어

▶ 5분 간격으로 실행
*/10 * * * * 유저아이디 명령어

▶ 매시 15분, 45분에 실행
15,45 * * * * 유저아이디 명령어
콤마를 구분으로 적을수 있다.

▶ 3시간 마다 30분에 실행
30 */3 * * * 유저아이디 명령어

▶ 매일 새벽 2시 20분에 실행
20 2 * * * 유저아이디 명령어
2 대신에 02로 적어도 된다.

▶ 매월 1일 새벽 1시에 실행
0 1 1 * * 유저아이디 명령어

▶ 월~금요일 아침 7시에 실행
0 7 * * 1-5 유저아이디 명령어

▶ 토, 일요일 아침 9시에 실행
0 9 * * 0,6 유저아이디 명령어

▶ 결과와 에러 출력없이 그리고 백그라운로 실행하기
* * * * * 유저아이디 명령어 /dev/null 2>&1 &

▶ 새벽6시 마다 서버시간 동기화 하기
0 6 * * * root /usr/bin/rdate -s time.bora.net && /sbin/clock -w

▶ 크론 허용 유저 등록
/etc/cron.allow 파일에 허용할 아이디를 추가

▶ 크론 거부 유저 등록
/etc/cron.deny 파일에 거부할 아이디를 추가

▶ 크론 수행 로그 파일
/var/log/cron 파일에 크론 수행한 로그가 기록된다.