BLOG ARTICLE 클론탭 | 2 ARTICLE FOUND

  1. 2014.01.28 [Linux] 클론탭(crontab) 기본 개념
  2. 2014.01.28 [Linux] 크론탭(crontab) 사용법 확장

 

Crontab 이란

 

 crontab은 스케줄링을 관리하는 프로그램으로 시스템 관리자에게 중요한 유틸 중 하나이다. 특정 시간대에 사용자가 작성한 스트립트나 명령을 실행 할 수 있다. 이는 rsync 같은 툴을 같이 사용하여 굉장히 편리한 백업 시스템을 만들 수도 있고 데이터 베이스관리나 기타 반복적인 업무를 간편하게 등록하여 사용 할 수 있다.

MIN HOUR DOM MON DOW CMD

필드 명세 허용 값
MIN 0~59
HOUR 시간 0~23
DOM 날짜 1-31
MON 1-12
DOW 0-6
CMD 명령어 실행 가능 한 모든 명령어

1. 다음 시간 6월 10일 오전 8시 30분 을 cron 명령어에 맞게 작성해보자.

30 08 10 06 * /home/script/backup
  • 30: 30분
  • 08: 오전 8시 <24시제>
  • 10: 10일
  • 06: 6월
  • *: 매주

2. 매일 하루 두 번 증분 백업을 하자.

00 11,16 * * * /home/script/incremental-backup
  • 00: 0분 (정각)
  • 11,16 - 오전 11시 / 오후 4시
  • *: 매일
  • *: 매달
  • *: 매주

3. 특정 시간대에 작업하기

00 09-18 ** 1-5 /home/check-db-status
  • 00: 0분 (정각)
  • 09-18: 오전 9, 10, 11, 12시 / 오후 1, 2, 3, 4, 5, 6시 마다 작업
  • *: 매일
  • *: 매달
  • 1-5: 월, 화, 수, 목, 금 (주중)

4. crontab 작업 목록 보기 (명령어)

$ crontab -l
@hourly /home/script/hourly-script
00 09-18 ** 1-5 /home/check-db-status

$ crontab -u foo -l
no crontab for foo

$ su
# crontab -l
no crontab for root

 

5. crontab 목록 수정

목록 수정을 vi/vim으로 편집하려면 변수를 선언해줘야 한다. export VISUAL=vim

$ crontab -e
$ crontab -u foo -e

6. 매분마다 작업하기

* * * * * CMD

7. 10분 마다 작업하기

*/10 * * * * /home/script/check-disk-space
0-10/2 * * * * /home/script/check-db-updates-5times
  • */10의 뜻은 10분 마다
  • 0-10/2의 뜻은 처음 10분 동안 2분 간격으로

8. 키워드 사용

Keyword

키워드 대치 문법
@yearly 0 0 1 1 *
@daily 0 0 * * *
@hourly 0 * * * *
@weekly 0 0 * * 0
@reboot 시스템 시작 시

다음은 키워드를 사용해 매일 반복하는 작업 스케줄링 crontab이다.

@daily /home/script/make-log

9. 메일 사용

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

MAILTO="xajax@naver.com"

10. 파일을 통한 crontab 설정

파일로 저장해 놓고 다른 시스템에 재 사용 하고 싶다면 다음과 같이 하면 된다.

$ crontab cron-file.txt
$ crontab -l
AND

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