본문 바로가기

IT/리눅스

리눅스 크론탭

크론탭이란 특정 작업을 특정 시기마다 수행하고 싶을때 이용할 수 있는 리눅스 스케줄 기능입니다.
크론탭의 기본 사용방법은 다음과 같습니다.

기본 사용법

# 크론탭 조회 # 현재 머신에 등록된 스케줄 목록이 조회됩니다. crontab -l # 크론탭 등록 / 수정 # vi편집기 형태로 크론탭 스케줄을 편집(edit)할 수 있습니다. crontab -e # 크론탭 삭제 crontab -d

스케줄 작성법

크론탭 표현식의 기본적인 형식은 다음과 같습니다.

[(0-59)] [(0-23)] [(1-31)] [(1-12)] [요일(0-7)] [실행할 명령어]

[실행할 명령어]를 언제 실행할 지 앞의 5자리를 통해 결정하는 형태입니다.

# 금요일 오전 130분에 runbatch.sh을 실행 30 1 * * 5 /app/script/runbatch.sh # 매 0, 20, 40분 마다 runbatch.sh를 실행 0,20,40 * * * * /app/script/runbatch.sh # 매 분 마다 실행 * * * * * /app/script/runbatch.sh # 보통 매 분마다 실행은 가독성을 위해 */1로 명시적으로 작성합니다. */1 * * * * /app/script/runbatch.sh # 매 3분 마다 실행 */3 * * * * /app/script/runbatch.sh

크론탭은 반드시 한 줄에 하나의 스케줄이 작성되야합니다. 즉 명령어 또한 한 줄이어야 하고 보통은 쉘 스크립트를 작성한 후 그 스크립트를 등록하는 방식을 이용합니다.

스케줄 로깅

출력 리다이렉션을 통해 스케줄 실행 결과를 로그로 남길 수 있습니다.

# runbatch.sh 수행로그를 runbatch.log 파일로 남김 (표준 출력만 해당) * * * * * /app/script/runbatch.sh > /app/logs/runbatch.log # runbatch.sh 수행로그를 runbatch.log 파일로 남김 (표준 에러 출력을 표준 출력으로 리다이렉트) * * * * * /app/script/runbatch.sh > /app/logs/runbatch.log 2>&1

리눅스에서 1은 표준출력, 2는 표준에러출력을 의미하고 > 를 통해 출력을 내보낼 수 있습니다. >> 를 하면 append하게됩니다.
"2>&1" 의 의미는 "2(표준에러출력)을 1(표준출력)으로 내보낸다" 라는 의미를 갖습니다.

 

crontab 이라는 명령어는 윈도우로 따지면 작업스케쥴과 비슷하겠습니다.

즉, 특정 시간에 원하는 작업이 저절로 실행될 때 사용을 합니다.

하지만,  현업에서는 정말 중요한 job이 돌 때는 crontab 을 설정 해 놓지만 사람이 그 시간에 정말 작업이 돌고 있는지 확인을 하지요..


crontab [-l][-e][-r]
이렇게 주로 사용합니다.

/var/spool/cron   여기에 해당 파일이 있으며 관리자만 접근이 가능합니다.

cron table 작성 시에는 ....

분 시 일 월 요일  + 명령 행   이런 조합으로 되는데 능숙하게 사용 하실려면 예제를 많이 보는 방법이 제일 좋은 것 같습니다.

분 0~59
시 0~23
일 1~31
월 1~12
요일 0~6 , 0=일요일  , 영어로 써도 됩니다.

#을 사용해서 주석처리가 가능합니다.
, 를 사용해서 여러 값 설정이 가능합니다.
- 를 사용해서 인터벌을 줄 수 있습니다.

crontab -e
이렇게 치면 입력 할 수 있는 화면이 나옵니다.

crotab -l 
이것은 기존의 정보를 보는 것입니다.

crontab -r 이것은 기존의 값을 삭제하는 것입니다.

예제

 # 매일 00시 05분에 특정작업을 하는 경우
5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# 매달 1일 오후 2시 15분에
15 14 1 * *     $HOME/bin/monthly
# 월요일부터 금요일 까지 매일 오후 10시에.
0 22 * * 1-5   mail -s "It's 10pm" joe%Joe,%%Where are your kids?%
23 0-23/2 * * * echo "이것은 매일 0, 2, 4, ... 시 23분에 보여집니다."
5 4 * * sun     echo "이것은 매 일요일 오전 4시 5분에 보여집니다."
http://www.linuxcertif.com/man/5/crontab/ko/



30 4,12 * * * /usr/bin/cmd  (매일 새벽4시 30분, 낮12시 30분에 /usr/bin/cmd 를 실행)

 

Linux Certif - Man crontab(5)

Rechercher une page de manuel crontab Langue: ko Version: 24 January 1994 (fedora - 25/11/07) Section: 5 (Format de fichier) 이름 crontab - cron 처리를 위한 테이블 파일 설명 crontab 파일에 담길 내용을 cron(8) 데몬에 의해 실행

www.linuxcertif.com

 

40 1 * * 0  /home/bloodguy/db.sh   (매주 일요일 새벽 1시 40분에 /home/bloodguy/db.sh 를 실행)

 

0 4-6 * * * 명령어  (매일 오전 4,5,6 시)

5 */2 * * * 명령어  (매일 2시간 간격으로 5분대 = 2시 5분, 4시 5분, 6시 5분 ... )

15 1 1 * *  명령어  (매월 1일 1시 15분)

30 3 1 1,3,6,9 명령어 (1월 1일 3시 30분, 3월 1일 3시 30분, 6월 1일 3시 30분, 9월 1일 3시 30분)

 http://www.underroom.com/5297

 


[root@rhel ~]# crontab --help
crontab: invalid option -- -
crontab: usage error: unrecognized option
usage:  crontab [-u user] file
        crontab [-u user] [ -e | -l | -r ]
                (default operation is replace, per 1003.2)
        -e      (edit user's crontab)
        -l      (list user's crontab)
        -r      (delete user's crontab)
        -i      (prompt before deleting user's crontab)
        -s      (selinux context)




CRONTAB(1)                                                          CRONTAB(1)

NAME
       crontab - maintain crontab files for individual users (ISC Cron V4.1)

SYNOPSIS
       crontab [-u user] file
       crontab [-u user] [-l | -r | -e] [-i] [-s]

DESCRIPTION
       Crontab  is the program used to install, deinstall or list the tables used to drive the cron(8) daemon in ISC Cron.  Each user can have their own crontab,
       and though these are files in /var/spool/ , they are not intended to be edited directly. For SELinux in mls mode can be even  more  crontabs  -  for  each
       range. For more see selinux(8).

       If  the cron.allow file exists, then you must be listed therein in order to be allowed to use this command.  If the cron.allow file does not exist but the
       cron.deny file does exist, then you must not be listed in the cron.deny file in order to use this command.  If neither of these  files  exists,  only  the
       super user will be allowed to use this command.

OPTIONS
       -u     It  specifies the name of the user whose crontab is to be tweaked.  If this option is not given, crontab examines "your" crontab, i.e., the crontab
              of the person executing the command.  Note that su(8) can confuse crontab and that if you are running inside of su(8) you should always use the  -u
              option  for  safetya€™s  sake.  The first form of this command is used to install a new crontab from some named file or standard input if the pseudo-
              filename "-" is given.

       -l     The current crontab will be displayed on standard output.

       -r     The current crontab will be be removed.

       -e     This option is used to edit the current crontab using the editor specified by the VISUAL or EDITOR environment variables.  After you exit from  the
              editor, the modified crontab will be installed automatically.

       -i     This option modifies the -r option to prompt the user for a a€™y/Ya€™ response before actually removing the crontab.

       -s     It  will  append  the current SELinux security context string as an MLS_LEVEL setting to the crontab file before editing / replacement occurs - see
              the documentation of MLS_LEVEL in crontab(5).

SEE ALSO
       crontab(5), cron(8)

FILES
       /etc/cron.allow
       /etc/cron.deny

STANDARDS
       The crontab command conforms to IEEE Std1003.2-1992 (a€˜a€˜POSIXa€™a€™).  This new command syntax differs from previous versions of Vixie Cron, as  well  as  from
       the classic SVR3 syntax.

DIAGNOSTICS
       A fairly informative usage message appears if you run it with a bad command line.

AUTHOR
       Paul Vixie <vixie@isc.org>

4th Berkeley Distribution       16 Januar 2007                      CRONTAB(1)