리눅스 환경에서 지정 날짜, 시간에 또는 시스템 부하 평균이 지정된 숫자 이하로 내려갈때 작업이 자동으로 실행되도록 설정 가능합니다. Red Hat Linux는 중요한 시스템 작업이 자동으로 실행되어 시스템을 업데이트하도록 미리 설정해 놓았습니다. 예를 들어 locate 명령을 사용하여 slocate 데이터베이스는 매일 업데이트됩니다. 시스템 관리자는 자동화 작업을 사용하여 주기적인 백업, 시스템 감시, 사용자 정의 스크립트 실행과 같은 여러 다양한 작업을 수행할 수 있습니다.
Red Hat Linux에는 다음과 같은 4가지 자동화 작업 유틸리티가 있습니다: cron, anacron, at, batch.
Cron은 정해진 시간, 일, 월, 주마다 반복적인 작업을 실행하도록 스케줄하는데 사용되는 데몬입니다.
Cron은 시스템이 계속적으로 켜져있을 경우에만 작동합니다. 만일 작업이 스케줄된 시간에 시스템이 꺼져있다면 그 작업은 실행되지 않습니다. 작업이 특정 시간에 실행되지 않고 일정 시간 마다 주기적으로 실행되도록 하시려면 28.2 절을 참조하시기 바랍니다. 한번만 실행되는 (one-time) 작업을 스케줄하기 위해서는 28.3 절을 참조해 보십시오.
cron 서비스를 사용하기 위해서는 반드시 vixie-cron RPM 패키지가 설치되어 있으며 crond 서비스가 실행 중이어야 합니다. 패키지 설치 여부를 알아보기 위해서는 rpm -q vixie-cron 명령을 사용합니다. 서비스 실행 여부를 알아보기 위해서는 /sbin/service crond status 명령을 사용하십시오.
주요 cron 설정 파일인 /etc/crontab에는 다음과 같은 줄이 포함되어 있습니다:
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root run-parts /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 |
처음 4 줄은 cron 작업이 실행되는 환경을 설정하기 위해 사용된 변수들입니다. SHELL 변수값은 시스템이 사용할 쉘 환경의 종류 (위의 예시에서는 bash shell)를 지시합니다. 그리고 PATH 변수는 명령 실행 경로를 정의합니다. cron 작업의 결과는 MAILTO 변수에 정의된 사용자에게 이메일로 보내집니다. 만일 MAILTO 변수가 공백 문자열(MAILTO="")로 정의된다면, 이메일을 보내지 않습니다. HOME 변수는 명령이나 스크립트를 실행할 때 사용할 홈 디렉토리를 설정하는데 사용됩니다.
/etc/crontab 파일에서 개별 라인은 실행할 작업을 나타내며 다음과 같은 형식을 갖습니다:
minute hour day month dayofweek command |
minute — 0 과 59 사이의 정수
hour — 0 과 23 사이의 정수
day — 1 과 31 사이의 정수 (지정된 월에 맞는 유효한 날짜일 것.)
month — 1 과 12 사이의 정수 (또는 월 이름의 약자. 예, jan, feb, 등)
dayofweek — 0과 7 사이의 정수, 여기서 0 또는 7 은 일요일을 의미함 (또는 주 이름의 약자. 예, sun, mon 등)
command — 실행할 명령어 (ls /proc >> /tmp/proc와 같은 명령어 또는 사용자가 직접 작성한 사용자 정의된 스크립트를 실행할 명령어).
앞에서 언급된 값에서 별표 (*)를 사용하시면 모든 유효값을 지정합니다. 예를 들어, 월 대신 별표를 지정한다면 다른 값의 범위 안에서 매달마다 명령을 실행하게 됩니다.
정수 값 사이에 하이픈 (-)을 사용하여 정수값의 범위를 지정할 수 있습니다. 예를 들어, 1-4는 정수값 1, 2, 3, 4를 의미합니다.
콤마 (,)로 구분된 값은 목록을 지정합니다. 예, 3, 4, 6, 8는 4개의 특정 정수를 나타냅니다.
슬래시 (/)를 사용하여 주기값을 지정할 수 있습니다. 정수 값은 /<integer> 다음에 나온 범위만큼 감소됩니다. 예를 들어 0-59/2를 사용하여 매 2분마다 작업이 실행되도록 정의할 수 있습니다. 주기값은 또한 별표와 함께 사용될 수도 있습니다. 예로서 */3 값을 사용하여 매 3달마다 작업이 실행되도록 설정할 수 있습니다.
우물정자 표시 (#)로 시작하는 줄은 모두 주석 처리되어 실행되지 않습니다.
/etc/crontab 파일에서 볼 수 있듯이 이 파일은 run-parts 스크립트를 사용하여 매 시간, 매일, 매주 또는 매월 단위로 /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly 디렉토리에 작성된 스크립트를 실행합니다. 이 디렉토리에 속한 파일은 모두 쉘 스크립트로 작성됩니다.
시간, 일, 주, 월 단위로 실행되는 작업 이외의 스케쥴에 맞추어 실행될 cron 작업이 필요하다면, /etc/cron.d 디렉토리에 추가합니다. 이 디렉토리 안의 모든 파일은 /etc/crontab와 동일한 구문을 사용합니다. 예 28-1에 나온 예시를 참조하시기 바랍니다.
# record the memory usage of the system every monday # at 3:30AM in the file /tmp/meminfo 30 3 * * mon cat /proc/meminfo >> /tmp/meminfo # run custom script the first day of every month at 4:10AM 10 4 1 * * /root/scripts/backup.sh |
예 28-1. Crontab 예시
루트 이외의 사용자는 crontab 유틸리티를 사용하여 cron 작업을 설정할 수 있습니다. 사용자 정의된 모든 crontab 파일은 /var/spool/cron 디렉토리에 저장되며 crontab을 생성한 사용자명을 사용하여 실행할 수 있습니다. 일반 사용자로서 crontab을 생성하기 위해서는 해당 사용자로 로그인하신 후 crontab -e 명령을 사용하여 사용자의 crontab을 편집합니다. 편집을 위해서는 VISUAL 또는 EDITOR 환경 변수에 지정된 편집기를 사용하십시오. 파일은 /etc/crontab 파일과 같은 형식을 사용합니다. crontab의 변경 사항을 저장하면 crontab은 사용자명에 따라 저장되어 /var/spool/cron/username 파일에 기록됩니다.
cron 데몬은 매 분마다 /etc/crontab 파일, /etc/cron.d/ 디렉토리와 /var/spool/cron 디렉토리가 변경되었는지를 확인합니다. 만일 변경된 사항이 발견되면, 변경 사항은 메모리로 로드됩니다. 따라서 crontab 파일이 변경된 경우에도 데몬을 재시할 필요가 없습니다.
/etc/cron.allow 와 /etc/cron.deny 파일을 사용하여 cron으로 접근을 제한할 수 있습니다. 이 접근 통제 파일은 각각의 줄마다 한개의 사용자명을 갖습니다. 접근 통제 파일이 수정되어도 cron 데몬 (crond)을 재시작하실 필요가 없습니다. 사용자가 cron 작업을 추가하거나 삭제하려고 할 때마다 액세스 통제 파일이 읽혀집니다.
루트 사용자는 접근 통제 파일의 목록에 사용자명이 포함되지 않아도 항상 cron을 사용할 수 있습니다.
만일 cron.allow 파일이 존재한다면, 이 파일에 나열된 사용자만 cron을 사용할 수 있으며 cron.deny 파일은 무시됩니다.
만일 cron.allow 파일이 존재하지 않는다면 cron.deny 파일에 지정된 사용자는 cron을 사용할 수 없습니다.
cron 서비스를 시작하시려면 /sbin/service crond start 명령을 사용합니다. 서비스를 정지하려면 /sbin/service crond stop 명령을 사용하시면 됩니다. 부팅시 서비스를 시작하는 것이 좋습니다. 부팅시 자동으로 cron 서비스를 시작하는 방법에 대한 자세한 정보는 14 장를 참조하시기 바랍니다.