Crontab은 리눅스에서 스케줄링하여 원하는 시간에 작업을 실행할 수 있는 아주 유용한 툴이다. 사용자가 적은 새벽 4시마다 디스크 백업을 하고 싶거나, 매일 00시에 아파치 로그파일을 압축 백업 하는 것과 같은 작업을 할 때 crontab은 매우 손쉽게 작업을 할 수 있다. 물론 Spring batch나 quartz 같은 것을 쓰면 분산처리나 로깅등에 유용하지만 간단한 실행파일을 하루 한번 돌리는데 그런 것들은 너무 거창하다.

 

각 사용자별로 crontab 파일을 가지게 되며, 이를 수정해두면 cron job scheduler가 지정된 시간에 주기적으로 지정된 파일을 실행해준다. 순차적으로 여러가지 일을 해야 한다면 쉘스크립트를 만들어 실행하면 편리하다. Crontab은 스크립트가 실패해도 로그를 남기지 않으므로 실행할 스크립트에서 실행 결과를 파일로 로깅하도록 하는게 관리 면에서 좋다. 실패하면 메일이나 SMS 등이 오고록 하는 것도 관리 측면에서 유용하다.

 

Crontab에서 실행할 스크립트를 등록하면서 많이 실수하는 것이 crontab에 등록하기전에 실행해보지 않는다는 것이다. 공들여 몇시간 만든 스트립트인데 문법오류나 실행권한없음 등의 이유로 실행되고 있지 않다가 수일에서 수개월이 지나서야  발견되는 경우를 흔히 볼 수 있다. 잘못 돌아갈 이유가 없어보여도 crontab 등록 후에 반드시 쉘스크립트나 실행 파일을 꼭 실행해보자.

 


또 하나 주의 할 점이 있는데 crontab에 등록하는 스크립트는 여러번 반복 실행해도 에러가 나지 않도록 만들어야 한다. 하루에 꼭 한번씩 특정 시간에만 실행되도록 만들면 안된다. 매일 새벽 4시에 실행되야 하는데 출근해서 점심 먹고 알았다고 해보자. 그런데 이 스크립트는 4시에만 실행해야 하고 오후 1시에 실행하면 안된다고 하면 당신의 출근은 갑자기 늦어지고 저녁 데이트에 못갈수도 있다. 시간적 종속성이 있고 실행여부가 매우 중요하다면 시간이 들더라도 crontab 말고 Spring batch나 quartz를 사용하도록 하자.

 

 

사용법

현재 로그인한 사용자의 crontab 파일 수정

$ crontab -e

 

현재 로그인한 사용자의 crontab 파일 내용 보기

$ crontab -e

 

현재 로그인한 사용자의 crontab 파일 삭제

(e와 r은 키보드에서 붙어 있어서 실수로 삭제 명령을 실행하는 경우가 있으니 주의)

$ crontab -r

 

Crontab 파일 문법

분(0-59) 시(0-23) 일(1-31) 월(1-12) 요일(0-7) 실행명령(절대경로)

 

예제

# 매일 04:00 backup.sh 실행

0 4 * * * $HOME/backup.sh

 

# 매월 1일 2시 30분 report.sh 실행

30 2 1 * * $HOME/report.sh

 

# 짝수 시간 마다 monitoring.sh 실행

0 0-23/2 * * * $HOME/monitoring.sh

 

닉네임 사용

자주 사용사는 것들은 아래와 같이 미리 정의된 닉네임을 사용할 수 있다.

@reboot  : Run once, at startup.

@yearly  : Run once a year, ie. "0 0 1 1 *".

@annually  : Run once a year, ie. "0 0 1 1 *".

@monthly : Run once a month, ie. "0 0 1 * *".

@weekly  : Run once a week, ie. "0 0 * * 0".

@daily   : Run once a day, ie. "0 0 * * *".

 

@hourly  : Run once an hour, ie. "0 * * * *".

 

실행내용 메일 받기

Crontab 수정시 위에 MAILTO를 선언하면 실행 내용을 메일로 받을 수 있다.

# dsmoon@daum.net 으로 메일 받기

MAILTO="dsmoon@daum.net"

 


# 메일 받지 않기

MAILTO=""


 

 

 

[출처] Crontab 설정|작성자 오라클

AND