본문으로 바로가기

리눅스 cron - 작업 예약 명령

category 리눅스/Linux 일반 2013. 7. 4. 23:24

CentOS 6.4에서는 RHEL6 버전부터 사용된 anacron이 채용되어 있습니다. 이로 인해 RHEL5 버전까지 crontab에 설정되어 있던 run-part부분, 즉 /etc/cron.hourly/, /etc/cron.daily/, /etc/cron.weekly/, /etc/cron.monthly/ 의 실행부분이 빠지게 됩니다.

자세한 부분은 anacron을 설명하는 부분에서 확인하세요.

cron

리눅스에서는 일반적으로 cron 데몬이 주기적인 작업 실행을 처리한다. cron이 시작될 때부터 끝날 때까지 계속 실행되며 실행되며 cron 설정 파일은 cron table을 줄여서 crontab이라 부른다.

크론의 실행 확인

ps -ef | grep crond

  root      1214     1  0 14:22 ?        00:00:00 crond

cron이 참조하는 crontab 파일 위치

  • /var/spool/cron
  • /etc/cron.d
  • /etc/crontab

cron은 시작할 때 모든 곳에 저장된 설정파일들을 읽어 메모리에 저장해두고 휴지 상태에 들어간다. 그리고 매분마다 활성화돼 변경된 crontab 파일들이 있는지 확인하고, 변경된 경우 설정을 다시 읽어 저장하고, 그 시간에 실행해야 할 작업이 있는지 확인하고 실행시킨 후 다시 휴지 상태로 들어간다.

/var/spool/cron

시스템 개별 사용자를 위한 crontab 파일 위치이며 일반적으로 root 계정용 하나와 계정 사용자당 1개의 파일을 가진다.

파일명은 사용자의 계정명이며 cron은 이 이름을 바탕으로 각 설정 파일에 지정된 작업들을 실행할 때 사용할 UID를 결정한다. 이 곳에 있는 설정파일들은 crontab 명령으로 관리한다.

/etc/crontab

관리자가 직접 지정한 작업들을 설정하며, 임의의 사용자 권한으로 실행할 수 있다. 시스템 관련 작업들을 등록해 사용하는 곳이다.

vi /etc/crontab

  SHELL=/bin/bash
  PATH=/sbin:/bin:/usr/sbin:/usr/bin
  MAILTO=root
  HOME=/

  # For details see man 4 crontabs

  # Example of job definition:

  # .---------------- minute (0 - 59)
  # |  .------------- hour (0 - 23)
  # |  |  .---------- day of month (1 - 31)
  # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
  # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
  # |  |  |  |  |
  # *  *  *  *  * user-name command to be executed

간단 예제

# date time sync
0 5 * * * root  /usr/bin/rdate -s time.bora.net && /sbin/hwclock -w

/etc/cron.d

소프트웨어 패키지를 설치할 때 필요한 주기적인 작업을 등록하는 공간으로 사용한다. 임의의 사용자 권한으로 실행할 수 있다.

cron의 사용자 제어

/etc/cron.deny와 /etc/cron.allow 설정파일에서 사용자에 대한 crontab 제어를 관리할 수 있다.

/etc/cron.allow

이 허용파일이 있는 경우 파일 내 지정된 사용자만 crontab을 등록할 수 있다. 지정되지 않은 사용자들은 crontab 명령을 실행할 수 없다.

/etc/cron.deny

허용파일이 없는 경우에는 이 거부 파일이 사용된다. 파일 내 지정된 사람을 제외한 나머지 사용자에게 crontab 명령 실행 권한이 주어진다.

두 파일 모두 존재하지 않을시

두 파일 모두 존재하지 않는 경우에는 대다수 시스템에서 루트 관리자만이다. 데비안과 우분투 배포판은 이런 경우 모든 사용자에게 실행 권한을 준다.

crontab 사용법

crontab 명령어를 사용하여 작성하는 cron은 개별사용자용 크론이다. /var/spool/cron 아래에 저장된다.

crontab 명령어

crontab [ -u 사용자 id] 파일
crontab [-u 사용자 id] { -l | -r | -e}

  • crontab -l : 예약된 작업리스트
  • crontab -e : 예약된 작업 수정
  • crontab -r : 예약된 작업 삭제
  • crontab -u 사용자명 : 루트관리자는 해당 사용자의 crontab 파일을 보거나 삭제, 편집가능

등록 내용 설정

"분,시,일,월,요일,[사용자명] 실행명령" 순으로 설정

crontab 파일 형식

------    --------  ---------------------------------------------------

필  드    의  미    범  위

------    --------  ---------------------------------------------------

첫번째    분        0-59

두번째    시        0-23

세번째    일        0-31

네번째    월        1-12

다섯번째  요일      0-7 (0 또는 7=일요일, 1=월, 2=화,...)

여섯번째  사용자명  /etc/crontab, /etc/cron.d 에 저장될 경우 필요

일곱번째  작업명령  실행할 명령을 한줄로 쓴다.

------    --------  ---------------------------------------------------


예)

45,5 10 * * 1-5 root /usr/bin/rdate -s time.bora.net && clock -w

월요일~금요일에 매월 매일 10시 5분과 45분에 루트의 권한으로 시간동기화 명령어를 실행한다.

  • * : 범위 내 모든 경우
  • 숫자 : 정확히 일치하는 그 시각, 날짜
  • '-' 기호로 연결된 두 숫자 : 두 숫자 사이에 포함된 범위를 뜻함
  • 콤마(,)로 구분돼 나열된 숫자 : 나열된 숫자 중 일치하는 경우를 뜻함


'리눅스 > Linux 일반' 카테고리의 다른 글

리눅스 Apache 2.2 특징  (0) 2013.07.09
리눅스 cron 자동화 예제  (0) 2013.07.04
메일 서버 구동의 이해  (1) 2013.06.25
리눅스 로컬네임서버(/etc/hosts) 설정  (4) 2013.06.23
DNS서버(네임서버) 설치  (18) 2013.06.22