2010년 8월 19일 목요일

Crontab(크론탭) 사용 방법

크론탭이란놈을 처음접하며.... 이거 머하는거여??
역쉬 개발자 왕!!초보이다보니 아~~ 이런것도 있구나~ 하고 있었다 ;;;
혹시 다음에 또 쓸일 있을지 모르니 기억해두자!!^^


1. cron
   - 일정시간 마다 시스템에서 자동으로 실행 시키는 데몬(Windows의 작업스케줄러와 비슷한 기능)

   - cron을 사용할때 crontab이라는 명령을 이용해서 실행(/etc/crontab)

   - 각 사용자가 등록한 crontab은 [리눅스 : /var/spool/cron/사용자명,  솔라리스 : /var/spool/corn/crontabs/사용자명] 저장됨

   - 현재 cron deamon이 돌고 있는지 확인
           ps -ef | grep cron
   - cron deamon kill
            kill -9 "pid of cron"
   - deamon 재실행
            /usr/sbin/cron


2. cron 데몬의 실행과 종료
   실행 : /etc/rc.d/init.d/crond [start/restart/stop]

 

3. crontab  
   - 지정된 시간에 다른 프로그램을 실행하면서 연속적으로 실행하는 프로그램

   - 유사한 명령으로는 at 명령어가 있음

 

4. crontab와  at 명령어의 차이점

   - crontab : 일정한 간격으로 계속해서 명령을 실행함

   - at : 지정된 명령을 한번밖에 수행하지 않음

 

5. crontab 옵션 
  #crontab [파일][-u사용자]     crontab을 사용자파일로 대체
  #crontab  -[-u사용자]            crontab을 표준입력으로 대채
  #crontab -l[사용자]               사용자를 위한 리스트를 보여줌
  #crontab -e[사용자]              사용자를 위한 crontab을 에디트 함
  #crontab -d[사용자]              사용자를 위한 crontab을 제거

 

6. crontab 작업형식

      [MM] [HH] [DD] [mm] [d] [command]

필드

 의미

 범위

 첫 번째  분  0~59
 두 번째  시  0~23
 세 번째  일  1~31
 네 번째  월  1~12
 다섯 번째  요일  0~7 (0,7 : 일요일, 1 : 월요일)
 여섯 번째  명령어  실행할 명령을 한줄로 쓴다.

    -  구분자는 space(공백)으로 구분

    -  시간을 나타내는 각 필드에서는 와일드 카드'*'를 사용할 수 있음

    -  각각의 요일을 구분할 때는 ','를, 연일을 나타날때는 '-'를 사용 즉, '1,3' : 월요일과 수요일, '1-5' : 월요일부터 금요일까지  
    -  한 줄당 하나의 명령 (두줄로 나눠서 표시할 수 없음)
    - # 으로 시작하는 줄은 실행하지 않는다.

 

7. crontab 사용 방법

          7-1) crontab 조회(-l 옵션)

                 [root@linux root]#crontab -l
                  → 작업목록을 보여준다.

                  → no crontab for truefeel(설정한 적이 없어 아직 비어있음)

 

          7-2) crontab

                 [root@linux root]#crontab aaa
                 → aaa 란 파일을 crontab 으로 사용(aaa 에는 이미 crontab 형식에 맞에 입력되어 있어야함)

 

          7-3) crontab 설정(-e 옵션) : 환경변수 EDITOR에 따라 다른 에디터를 사용할 수 있음

              ※ 시간 설정 몇가지 의미
                 - '*'표시는 해당 필드의 모든 시간을 의미
                 - 3,5,7와 같이 콤마(,)로 구분하여 여러 시간대를 지정할 수 있음
                 - 2-10와 같이 하이픈(-)으로 시간 범위도 지정할 수 있음
                 - 2-10/3와 같이 하이픈(-)으로 시간 범위를 슬래쉬(/)로 시간 간격을 지정할 수 있다

                    (2~10시까지 3시간 간격으로. 즉, 3, 6, 9시를 의미함)

 원하는 시간

 형식

 매주 토요일 새벽 2:20                      20  2 *  *  6  명령어
 매일 오후 4,5,6시    0  4-6   *  *  *  명령어
 매일 2시간 간격으로 5분대에  5  */2 *  *  * 명령어
  매월 1일 새벽 1:15  15  1   1  *  * 명령어
  1,7월 1일 새벽 0:30  30  0   1  1,7  * 명령어

                                              

                  1. 매시 1회 자동실행하기 위한 시스템 크론 설정
                      01 * * * * root run-parts /etc/cron.hourly
                   - 매일 매시 01분마다 /etc/cron.hourly 디렉토리내에 존재하는 파일들을 실행
 
                  2. 매일 1회 자동실행하기 위한 시스템 크론설정
                      02 4 * * * root run-parts /etc/cron.daily
                   - 매일 새벽 4시 02분마다 /etc/cron.daily  디렉토리내에 존재하는 파일들을 실행
 
                  3. 매주 1회 자동실행하기 위한 시스템 크론설정
                      22 4 * * 0 root run-parts /etc/cron.weekly
                   - 매주 일요일 새벽 4시 22분마다 /etc/cron.weekly 디렉토리내에 존재하는 파일들을 실행
 
                  4. 매월 1회 자동실행하기 위한 시스템 크론설정
                     42 4 1 * * root run-parts /etc/cron.monthly
                  - 매월 1일 새벽 4시 42분마다 /etc/cron.monthly 디렉토리내에 존재하는 파일들을 실행

     

                  5. 설정예 : 한국표준시간 연구소에서 매일 새벽 1시에 표준시간을 가지고 오도록 설정할 경우
                     00 1 * * * root rdate -s time.kriss.re.kr && clock -w

             

                  6. 월,수,금 오전 4시에 notice 라는 문서의 내용을 메일로 발송한다.
                      0 4 * * 1,3,5 cat /root/notice | mail -s "notice" mailID@naver.com

          7-4) root 이외의 사용자에게 crontab 명령어를 이용할 수 있게 하는 방법
                 - /etc/cron.allow 파일에 사용자의 id를 등록
                 - 일반사용자의 crontab 명령어 사용을 제안하고자 한다면 : /etc/cron.deny 파일에 사용자의 id 를 등록

 
         7-5) FAQ
               1) cron 설정한 후에는 crond 데몬을 재실행해야 하나요?
                   - 아닙니다. crontab -e 으로 설정 후 빠져나오면 바로 적용됩니다.
              2) truefeel 사용자는 cron을 못 쓰게 하고 싶습니다.
                 /etc/cron.allow : 허용할 사용자 ID 목록
                 /etc/cron.deny  : 거부할 사용자 ID 목록
                cron.allow 파일이 있으면 이 파일에 들어있는 ID만 사용 가능
                cron.deny  파일이 있으면 이 파일에 들어있는 ID는 사용 불가
                따라서 cron.deny에 truefeel ID를 추가해주면 됩니다.
               3) > /dev/null  2>&1 이 무슨 뜻입니까?
                  - 지정한 명령어 처리 결과와 발생할지 모르는 에러메시지를 출력하지 않고 모두 버린다는(/dev/null)는 뜻입니다.
                    만약 결과와 에러를 파일로 저장하려면 /dev/null 대신 파일명을 적어주면 됩니다.

 
 
 
 
  /etc/crontab내용과 설명
      SHELL=/bin/bash
      PATH=/sbin:/bin:/usr/sbin:/usr/bin
      MAILTO=root
      HOME=/

      # run-parts
      01 * * * * root run-parts /etc/cron.hourly
      #시간 단위로 실행시키 프로그램입니다.
      # /etc/cron.hourly디렉토리에 있는 내용을 모두 실행합니다.
      02 4 * * * root run-parts /etc/cron.daily
      # 일단위입니다.
      22 4 * * 0 root run-parts /etc/cron.weekly
      # 주단위 입니다.
      42 4 1 * * root run-parts /etc/cron.monthly
      # 월단위 입니다.

댓글 없음:

댓글 쓰기