2010. 3. 13. 02:25

crond - 일정한 주기로 뭔가 해보자 - fedora 8

####################################################
## cron - 주기적인 작업이 필요할 때 사용하는 도구 ##
# 1. 참고 사이트
# 2. 간단하게 살펴보기
# 3. 사용 방법 및 보기
# 4. 잘 동작하는지 확인하기
####################################################
1. 참고 사이트
  a. 9.4. Cron 과 Crontab 파일을 이용하여 작업을 자동화하기
    . http://wiki.kldp.org/Translations/html/LAME/using-cron.html
   a. [Cron] 예약실행 크론(Cron,At,Anacron)의 상세 설명 문서
    . http://community.365managed.com/?mid=l_service&listStyle=webzine&page=4&document_srl=936&sort_index=readed_count&order_type=asc

2. 간단하게 살펴보기
a. 개요
   리눅스의 cron 기능은 다른 유닉스와 거의 같게 구현되어 있다. 하지만, 레드햇은 작업의 스케쥴을 잡는데 있어서 다른 리눅스 배포판과는 약간 다른 방식을 채택하고 있다. 다른 배포판과 마찬가지로 스케쥴링 정보는 시스템내의 (``/etc/'' 디렉토리의) ``crontab'' 파일에 다음과 같은 형식으로 저장된다

:분 시 일 월 요일(연) 명령
   # 요일 (0~7, 0과 7은 일요일을 나타냄)
   # 이부분 확인 필요하다. 연도 표시인지 요일인지

   각 항목은 정수로 (예를 들어, 1월부터 12월을 나타내기 위하여 1부터 12사이의 숫자를 사용) 지정할 수도 있고 몇개의 항목은 와일드카드 문자로 인식되>는 ``*'' 문자로 (예를 들어, 월에 해당하는 항목에 * 표시가 있으면 매월 지정된 날짜, 지정된 시간에 명령이 실행된다는 것을 의미한다) 표시할 수도 있다. 몇가>지 예를 들어보면:

3. 사용 방법 및 보기
a. /etc/crontab 파일에 아래처럼 넣어 주면 된다.
   # 매년 6월 15일 오후 4시 30분에 시스템 로그 파일을 메일로 발송한다
30 16 15 06 * for x in /var/log/*; do cat ${x} | mail postmaster; done
   # 관리자에게 계절이 바뀌었음을 자정에 알려준다
   00 00 20 04 * echo 'Woohoo, spring is here!'
   00 00 20 06 * echo 'Yeah, summer has arrived, time to hit the beach!'
a. 위 처럼 넣어준 후 crond 데몬을 재시동 해준다.
   service crond restarat
a. 표준인 ``crontab'' 외에도 레드햇은 몇개의 디렉토리를 추가하였다:
   /etc/cron.hourly/
   /etc/cron.daily/
   /etc/cron.weekly/
   # 이들 디렉토리의 아무 곳에나 실행가능한 파일을 둘 수 있으며, 이들 파일은 각기 매시, 매일, 매주 단위로 실행된다.
a. /etc/crontab 파일 예제
   ----------------------------------------------------------------------------
   /etc/crontab 파일 분석 SHELL=/bin/bash ↙ 시스템이 사용할 쉘의 종류.
   PATH=/sbin:/bin:/usr/sbin:/usr/bin ↙ 실행파일을 찾을 경로 설정.
   MAILTO=root ↙ 예약 작업의 실행 결과를 뒤에 명시된 메일 주소로 보내줌. 메일주소를 비워두면 보내지 않음.
   HOME=/ ↙ 명령을 실행할 때 사용할 홈디렉토리 경로.
   ↙
   # run-parts ↙ 주석. 
   01 * * * * root run-parts /etc/cron.hourly ↙ 매 시간 1분에 실행.
   02 4 * * * root run-parts /etc/cron.daily ↙ 매일 4시 2분에 실행.
   22 4 * * 0 root run-parts /etc/cron.weekly ↙ 매주 일요일 4시 22분에 실행.
   42 4 1 * * root run-parts /etc/cron.monthly ↙ 매월 1일 4시 42분에 실행.
   ----------------------------------------------------------------------------

4. 잘 동작하는지 확인하기
   a. /var/log/cron 파일의 로그를 확인한다. solaris에서는 /var/cron/log
   a. 아래처럼 로그파일을 만들어 확인한다.
      00 00 20 04 * echo 'Woohoo, spring is here!' >> /home/user/my-cron.log
   a. 스크립트의 실행권한이 설정되어 있는지 꼭 확인하자.