본문 바로가기

Linux

crontab

출처 : http://cafe.naver.com/newchany/237 


crontab 

 

  - 시스템의 주기적인  cron 작업의 설정, 수정등을 하는 명령어
  - 시스템에서 가장 중요한 데몬중의 하나인 crond 와 직접적인 관련이 있는 명령어
  - crond 데몬은  /etc/rc.d/init.d/crond 의 스크립트에 의해 시작, 종료, 재시작될수 있음

  - crond 데몬
     - /etc/crontab 파일
     - /etc/rc.d/init.d/crond 스크립트
     - /var/spool/cron 디렉토리내의 크론설정파일들

 

 

명령어 위치 : /usr/bin/crontab
사용형식     : crontab [ -u 사용자id ] 파일
                   crontab [ -u 사용자id ] { -l | -r | -e }

 

cat /etc/crontab
매시 1회 자동실행하기 위한 시스템 크론 설정

01 * * * * root run-parts /etc/cron.hourly
  - 매일 매시 01분마다 /etc/cron.hourly 디렉토리내에 존재하는 파일들을 실행


매일 1회 자동실행하기 위한 시스템 크론설정

02 4 * * * root run-parts /etc/cron.daily
 - 매일 새벽 4시 02분마다 /etc/cron.daily  디렉토리내에 존재하는 파일들을 실행

 

매주 1회 자동실행하기 위한 시스템 크론설정

22 4 * * 0 root run-parts /etc/cron.weekly
 - 매주 일요일 새벽 4시 22분마다 /etc/cron.weekly 디렉토리내에 존재하는 파일들을 실행

 

매월 1회 자동실행하기 위한 시스템 크론설정

42 4 1 * * root run-parts /etc/cron.monthly
 ->매월 1일 새벽 4시 42분마다 /etc/cron.monthly 디렉토리내에 존재하는 파일들을 실행


* root 이외의 사용자에게 crontab 명령어를 이용할 수 있게 하는 방법

  - /etc/cron.allow 파일에 사용자의 id를 등록


* 일반사용자의 crontab 명령어사용을 제안하고자 한다면
  - /etc/cron.deny 파일에 사용자의 id 를 등록


 

* cron 설정하는 방법

 40 3 * * * root /home/mysql/mysql_backup.sh

 

 맨 앞의 40은 40분을 의미함 (분을 의미:0~59)

 그 뒤의 3은 03시를 의미함 (시를 의미:0~23)

 그 뒤의 * 은 매일을 의미함 (일을 의미:1~31)

 그 뒤의 * 은 매월을 의미함 (월을 의미:1~12)

 그 뒤의 * 은 매주를 의미함(요일을 의미 1:월요일~7:일용일)

 그 뒤의 root /home/mysql/mysql_backup.sh 는 root  계정으로 mysql_backup.sh을 실행하라는

 의미

 

 * 문자 : 각 필드에 해당하는 모든 숫자를 의미

 - 문자 : 각 필드자리에 하이픈 문자가 올수 있음

   ex) 일 필드자리에 11-15 (11,12,13,14,15일을 의미)

 ,문자 : 각 필드자리에 콤마문자가 올수 있음

   ex) 일 필드자리에 1,11,21 (1일,11일 21일을 의미)


출처 : http://blog.naver.com/ghost656/100147013320

  • crontab : job scheduling을 하기 위해 사용한다

    Ex) 보통 회사서버에서 관리자는 백업을 사용자들이 덜 이용하는 시간대인 새벽에 진행하는데

    이를 주기적으로 하기위해서 매번 관리자 본인이 새벽시간대에 회사에 출근 할 수는 없다

    그래서 crontab을 이용해서 job scheduling을 등록하면 굳이 출근하지않고도 미리 등록해놓은 시간대에

    서버가 알아서 백업을 한다

    만약 일회용으로 사용하려면 at을 사용하면 되지만 이는 복잡하고 crontab으로도 일회용을 사용할 수 있으므로 실무에선 crontab만 사용한다

       

  • crontab 옵션
    • #crontab -e [사용자 계정명] : edit, 사용자 계정명란에 계정을 넣으면 그 계정에게만 crontab을 적용하며

      생략하면 root계정에 적용시킨다. 하지만 사용자 계정에는 권한적인 제한사항이 많으므로 실무에서는

      root계정에 직접 crontab을 한다

    • #crontab -l : list
    • #crontab -r : remove, 잘못사용시 큰 사고를 야기하므로 실무에서는 거의 사용하지 않는다

      ★crontab에 의해 생성된 사용자 디렉토리는 절대로 vi로 편집해서는 안된다!!!!

       

  • crontab 예시(crontab -e로 편집창으로 들어간 후에 기록하는 것)

    편집 : [분 시 일 월 주 명령어] 순으로 들어가며 간격은 spacebar 간격이다

    분 : 0~59, 시 : 0~23, 일 : 1~31, 월 : 1~12, 주 : 0~6

    단 주는 0은 일요일, 1은 월요일…..6은 토요일이며 분과 시는 동시에 0이 되어선 안된다

    • 매주 수요일 새벽 2시 30분 : 30 2 * * 4
    • 매월 13일 새벽 1시 50분 : 50 1 13 * *
    • 짝수 월 마다 새벽 2시 정각 : 0 2 * 2,4,6,8,10,12 *
    • 매 주 월요일부터 목요일까지 오후 1시 10분 : 10 13 * * 1-4
    • 매 주 토요일 새벽 1시부터 5시까지 매 분 : * 1-4 * * 6
    • 매 주 일요일 새벽 1시 정각 서버전체에서 setgid 걸린 file을 찾아서 /aaa.txt로 저장

      : 0 1 * * 0 find / -perm -2000 -print >> /aaa.txt

    • 매월 1일 저녁 11시 20분 /etc 밑에 최근 일주일동안 변경된 파일을 찾아서 /abc.txt로 저장

      : 20 23 1 * * find /etc -mtime -7 -print >> /abc.txt

    • 매일 출근했을때 console창으로 날짜와 달력을 출력

      : 30 8 * * 1-5 cal > /dev/console ; date > /dev/console

      ★device로 넘길 때에는 > , 파일로 저장할 때에는 >>으로 해야한다

      ★crontab의 refreshing time은 3분이다!! 즉 3분은 있어야 적용이 된다는 말이다

         

  • 관련 파일
    • /etc/cron.d/cron.allow : 처음 서버를 설치했을때 존재하지않으며 있으면 문제가 되는 파일이다

      이 파일이 존재하는 경우에 이 파일에 기록되어있어야만 crontab에 접근할 수 있다!

    • /etc/cron.d/cron.deny : 처음 서버를 설치했을때부터 존재하는 파일이며 이 파일에 기록되어있지 않은 사용자만 접근이 가능하다
    • 만약 위의 두 파일다 없는 경우에는 root만 사용가능하다
    • 위의 두 파일의 내용에는 한 줄 간격으로 내용이 들어간다

         

  • crontab 실습
    • Editor 설정 : 설정 해주어야 crontab -e를 사용했을때 알아서 vi편집기가 호출된다

      절대로 vi편집기로 crontab 설정파일을 직접 열어서는 안된다!!!

    • 사용자 계정 추가

    • #crontab -e wanderer 으로 3-h 예시 등록

      을 하면 vi편집기가 호출되고 명령을 적어주면 된다

    • wq로 저장 후 나오면 되는데 crontab의 오타 혹은 명령 오류는 심각한 장애를 야기할 수도 있기때문에

      서버 자체에서 검사를 한다. 만약 오류가 있는 것같으면 저장이 되지 않고 error 메시지가 뜨며 그냥 빠져나오니 주의하자, 그렇다고 너무 맹신하지 말고 알아서 오타나 명령오류를 잘 생각하고 명령을 적어주자

    • #crontab -l wanderer 목록 확인 및 제거

         

    • SMS와 NMS
      • SMS(Server Management System) : 장애가 나면 server의 lever에 따라 통보방식을 달리하여 알려준다

      • NMS(Network Management System) : Network 장비에 문제가 생기면 알려준다

        [출처] 14강 crontab|작성자 새벽안개

'Linux' 카테고리의 다른 글

시스템 성능향상을 위한 팁!!  (0) 2012.07.04
SAR in Ubuntu  (0) 2012.06.22
crontab  (0) 2012.06.21
리눅스용 텍스트 브라우저 W3m 사용기  (0) 2012.06.15
Ubuntu에 NFS4 쓰기  (1) 2012.06.14
하드디스크 파티션에 대해서  (0) 2012.05.02