[Unix,Linux] Crontab

Linux 2009.10.05 19:48 Posted by 애플자라

리눅스 구버전시 사용

cd /etc
vi crontab 수정후

service crond restart

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

root권한으로

crontab -e 등록&수정
crontab -l 확인

vi /var/log/cron 크론로그 확인


#!/bin/sh

#날짜 디렉토리 찾기
Year=`date +"%Y"`
Mon=`date +"%m"`
Day=`date +"%d"`


# 로그파일들을 당일분만 남겨놓고 나머지는 삭제한다.

#/usr/bin/find /data2/namha/ems51/auto/tmp/$Year/$Mon/. -name '??' -mtime +1 -exec /bin/rm  -rf {} \;
#/usr/bin/find /data2/namha/ems51/auto/$Year/$Mon/. -name '??' -cmin +720 -exec /bin/rm  -rf {} \;
/usr/bin/find /data2/namha/ems51/auto/agent_log/ -name '??' -mtime +7 -exec /bin/rm  -rf {} \;
/usr/bin/find /data2/namha/ems51/auto/tmp/ -name '??' -mtime +14 -exec /bin/rm  -rf {} \;
/usr/bin/find /data2/namha/ems51/auto/log/ -name 'send_*' -mtime +30 -exec /bin/rm  -rf {} \;
/usr/bin/find /data2/namha/ems51/auto/log_process/ -name 'back_*' -mtime +30 -exec /bin/rm  -rf {} \;
/usr/bin/find /data2/namha/ems51/auto/trace/ -name '??' -mtime +14 -exec /bin/rm  -rf {} \;
/usr/bin/find /data2/namha/ems51/jupiter/agent_log/ -name '??' -mtime +7 -exec /bin/rm  -rf {} \;
/usr/bin/find /data2/namha/ems51/jupiter/log/ -name 'send_*' -mtime +30 -exec /bin/rm  -rf {} \;
/usr/bin/find /data2/namha/ems51/jupiter/log_process/ -name 'back_*' -mtime +30 -exec /bin/rm  -rf {} \;
/usr/bin/find /data2/namha/ems51/jupiter/trace/$Year/$Mon/. -name '??' -mtime +14 -exec /bin/rm  -rf {} \;
/usr/bin/find /data2/namha/ems51/sms_mass/agent_log/ -name 'db_*' -mtime +7 -exec /bin/rm  -rf {} \;
/usr/bin/find /data2/namha/ems51/sms_mass/trace/ -name 'send_*' -mtime +14 -exec /bin/rm  -rf {} \;
/usr/bin/find /data2/namha/ems51/sms_auto/agent_log/ -name '??' -mtime +7 -exec /bin/rm  -rf {} \;
/usr/bin/find /data2/namha/ems51/sms_auto/trace/ -name '??' -mtime +14 -exec /bin/rm  -rf {} \;


fine    : 파일을 찾는다

/export/home/tester   : /export/home/tester 디렉토리 이하에서 찾는다.
-mtime +30 : 파일 변경된 날짜가 30일 이상인 파일을 찾는다
-print : 파일을 찾아서 화면에 보여준다.
-exec : -print에 의해 출력되는 파일을 뒤에 오는 명령어의 인수로 입력된다.
rm -f  : -exec에 의해 받은 인수파일을 삭제한다.
{} \; - exec끝을 의미한다.
전체적인 의미는 /export/home/tester 디렉토리에서 파일내용이 변경된지 30일이 지난 파일을 찾아서 삭제하는 명령입니다.
위 명령어를 crontab에 등록 시킨후 매일 한번씩 실행 시키면 될것 같습니다.
보다 자세한 내용은 man find를 이용해 보세요

일정 주기로 처리하는 배치 프로세스의 경우 시스템 crontab에 등록 하여 자동화 시킬 수 있다.

(형식)
분        시     날짜    달         요일   하고싶은일( 쉘 스크립트로 만들어 두어도 됩니다.)
0-59    0-23   1-31    1-12      0-7
                                      (  0,7 : 일요일, 1: 월 2: 화 ... sun, mon 사용가능 )
(예제)
15 06 * * *   do_daily.sh       ; 매일 6시 15분에 do_daily 스크립트 실행                    
00 03 * * 7   do_weekly.sh    ; 매주 일요일 3시00 에 do_monthly 스크립트 실행
10 04 1 * *   do_monthly.sh  : 매월 1일 4시 10분에 do_monthly 스크립트 실행

======== 아래것은 ========

* crontab 명령

$ crontab [-e | -l | -r]


-e: 등록된 crontab을 편집한다.
-l: 등록된 crontab명령을 출력한다.
-r: 등록된 crontab을 삭제한다.


 * crontab 편집

$ crontab -e


위 명령을 입력하면 vi 환경에서 crontab 편집이 된다

20 13 * * 7 /home/batch/script/backup.sh
0 6 1 3 * /home/batch/script/logdel.sh
0 0 * * * /home/batch/script/daybatch.sh
30 * * * * /home/batch/script/hourbatch.sh
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /home/batch/script/checksys.sh

위 내용은 vi 환경에서 crontab 샘플이다.
구분자는 공백으로 앞에서 부터 분(0~59), 시(0~23), 일(1~31), 월(1~12), 주(1:월~7:일),  실행명령을 의미한다.  ","(컴마)를 구분자로 복수 시간을 지정할 수 있다.

backup.sh는 매주 일요일 13:20에 기상시간을 알리며 실행된다.
logdel.sh는 매년 3월 1일 06:00에 삼일절을 기념으로 실행된다.
daybatch.sh는 매일 00시 00분에 퇴근시간을 알리며 실행된다.
hourbatch.sh는 매시간 30분에 실행된다.
checksys.sh는 5분마다 실행된다.


* crontab 사용시 주의 사항

계정을 정해주지 않으면 root권한으로 실행된다.

crontab에 아래의 프로세스가 등록되어 있다고 가정하자.
0 * * * * /home/batch/bin/run_hourbatch

run_hourbatch는 오라클을 연동하는 Pro-C로 만들어져 있다고 가정하자.
이 프로세스는 1시간 간격으로 수행되는 배치 프로세스이다.

하지만, 이렇게 프로세스를 직접 실행을 하면 수행에 실패한다.
Error while trying to retrieve text for error ORA-12154
로그를 확인해 보면 위와 같은 메시지와 함께 DB 커넥션을 하지 못한다.

이는 crontab에 등록된 프로세스가 root권한으로 실행되면서 오라클 환경변수를 읽는데 실패했기 때문에 발생하는 것이다.


참조 - http://newtype.tistory.com/tag/crontab

crontab등록.zip



'Linux' 카테고리의 다른 글

find grep 파일명 찾기  (0) 2010.01.05
[Linux] 계정,그룹만들기  (0) 2009.10.05
[Unix,Linux] Crontab  (0) 2009.10.05
rm시 물어볼때  (0) 2009.06.25
log안 특정문자만 추려 파일로 떨궈내기  (0) 2009.01.07
파일 읽기, 쓰기 권한있는지 확인  (1) 2008.09.11

댓글을 달아 주세요