====== CRON ====== ===== cron table 형식 ===== - cron table은 모두 6가지 필드로 이루어져 있습니다. - 각 필드는 하나이상의 space로 구분되며 하나의 배치작업은 한 라인에 정의됩니다. - 첫 필드에 #이 나타나면 그 라인은 주석라인(comment 처리됨)입니다. * 예 - 매시마다 시스템의 부하량(load average)를 /tmp/load.log라는 파일에 저장한다고 가정해 봅시다. - 시스템의 부하량 점검은 uptime(1) 명령으로 알 수 있습니다. - 이러한 배치작업을 실행하기 위한 cron table의 내용은 아래와 같습니다. - 가정 : cron.allow, cron.deny는 존재하지 않음 => root 만이 crontab 명령 사용 가능. * 즉, cron table 형식은 다음과 같습니다. minite hour day month week command * 예를 들어 다음과 같은 라인이 있다고 합시다. 1 2 3 4 5 uptime >> /tmp/load.log - 위cron table은 금요일(5) 이면서 4월(4) 3일(3) 02시(2) 01분(1) 에 "uptime >> /tmp/load.log" 라는 명령을 실행시키라는 의미 - 4월 3일이면서 금요일인 날이 과연 몇번이나 있을까요.. - (일요일은 0으로 표현됩니다.) * 만약 13일 금요일 13시 정각마다 위 프로그램을 실행시킬려면 ? 0 13 13 * 5 uptime >> /tmp/load.log ===== cron table field(필드) 형식 ===== - crontab file은 각 entry마다 여섯개의 field로 구성되어있다. - 각 필드는 space 나 tab으로 구분한다. - 토요일 4시 5분에 /usr/lib/newsyslog 명령이 실행되는 예이다. \\ 분(0-59) 시간(0-23) 일자(1-31) 월(1-12) 주(0,6) 명령어라인 5 4 * * 6 /usr/lib/newsyslog - 필드에 들어갈 수 있는 값들이다. === === ^ field ^ allowed values ^ description ^ ^ minute | 0-59 | 분 | ^ hour | 0-23 | 시간 | ^ day of month | 1-31 | 일 | ^ month | 1-12 (or names, see below) | 월 | ^ day of week | 0-7 (0 or 7 is Sun, or use names) | 주 | ^ command | specified command | 실행될 명령 | === 처음부터 다섯번째 필드는 다음 형식을 가질 수 있다 === ^ n | n값과 일치 | ^ n,p,q | n,p, or q와 일치 | ^ n-p | n과 p 사이의 값과 일치 | ^ * | 항상 일치 | ^ */10 | 맨처음 실행시점부터 10분마다 | ^ */1 | 먼처음 실행시점부터 1분마다 | ===== 디렉토리 및 파일 ===== - crontab 환경설정 디렉토리 : /etc/cron.d/ - crontab 로그저장 디렉토리 : /var/cron/ - crontab (현재 crontab file을 보기위해서는 crontab -l 을 사용) * cron daemon은 시스템 booting시에 자동으로 시작된다. * cron daemon은 /var/spool/cron/crontabs 디렉토리에 있는 crontab화일을 읽는다. * 이 명령어는 정해진 시간에 정규적으로 실행된다.(시간은 군대시간이다) - root crontab file */etc/cron.d/logchecker - /var/cron/log가 최대 화일 크기를 초과하는지를 판단하고, 만약 초과하면 내용을 /var/cron/olog로 복사한다. * /usr/lib/newslog - syslog daemon에 의해서 /var/adm 디렉토리에 생성되는 log file을 청소한다. - Controlling crontab Access (cron utility를 제어하는 두개의 file) * /etc/cron.d/cron.allow */etc/cron.d/cron.deny ==== User Access ==== - 만약 cron.allow file이 존재하면, 그 file에 적혀있는 user만이 crontab 명령어를 사용할 수있다. - 만약 이 file이 없으면 crontab은 cron.deny file을 체크해서 user가 crontab 실행을 금지할 지를 결정한다. - 만약 둘다 없으면 crontab은 root만 실행시킬 수 있다. - daemon, bin, smtp, nuucp, listen, nobody, noaccess file은 crontab 사용할 수 없다. - cron.allow file은 user가 만들어 주어야한다. ==== The crontab Command ==== - crontab 명령어는 crontab file을 수정, 삭제, 편집할 수있다. - crontab 명령어는 user에대한 입력을 /var/spool/cron/crontabs/username에 저장한다. - root 만이 다른 user의 crontab file을 읽고 편집할 수있다. - root의 crontab file은 /var/spool/cron/crontab/root 이다. ===== Example ===== ==== How to Edit the User's crontab file ==== - 기본 Editor를 설정한다. $ EDITER=vi $ export EDITOR - crontab file을 수정한다. \\ $ crontab -e 20 15 * * 5 /usr/bin/banner "TIME TO GO!" > /dev/console 0 0 * * * /usr/bin/tar cvf /dev/rmt/0 /export/home/rickyd :wq - 현재의 crontab file을 본다. $ crontab -l ==== Others ==== - 만약 uptime >> /tmp/load.log를 jaeyjang이라는 사용자가 실행시키게 하고 싶다면? 0 13 13 * 5 su - jaeyjang -c "uptime >> /tmp/load.log" - 즉 command 필드에서 su 명령을 사용하여 프로그램을 jaeyjang이라는 사용자가 실행하게 하면 됩니다. - -c 옵션은 su 명령에 있는 옵션인데 -c 옵션뒤에 command 가 나온다는 의미입니다. - su 형식 : su - user -c command argument - 만약 w >> /tmp/load.log를 09시부터 18시동안 30분 마다 실행하고 싶다면? 0,30 09-18 * * * uptime >> /tmp/load.log - 매일밤 0시 5분에 실행된다. # run five minutes after midnight, every day 5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1 - 매월 1일 14시 15분에 실행된다. # run at 2:15pm on the first of every month -- output mailed to paul 15 14 1 * * $HOME/bin/monthly - 월요일부터 금요일까지 22시정각에 실행된다. # run at 10 pm on weekdays, annoy Joe 0 22 * * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?% - 매일 2,4,6...20,22시 23분에 실행된다. 23 0-23/2 * * * echo "run 23 minutes after midn, 2am, 4am ..., everyday" - 일요일 4시 5분에 실행된다. 5 4 * * sun echo "run at 5 after 4 every sunday"