'환경변수'에 해당되는 글 1건

  1. crontab (1)

crontab


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


* 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 사용시 주의 사항

crontab 으로 명령이 수행되면 기존 환경변수를 인식 하지 못한다.

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

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

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

이는 crontab에 등록된 프로세스가 실행되면서 .profile에 등록된 오라클 환경변수를 읽어 들이지 않기 때문에 발생하는 것이다.

crontab의 내용을 아래와 같이 수정하자
30 * * * * /home/batch/script/hourbatch.sh

그리고 아래와 같은 hourbatch.sh라는 shell script를 생성한다.
$ vi /home/batch/script/hourbatch.sh
#!/bin/ksh
# 오라클 환경 변수 설정
ORACLE_SID=TESTDB;
export ORACLE_SID
ORACLE_BASE=/home/oracle/app/oracle;
export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/9.1.1;
export ORACLE_HOME
ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data;
export ORA_NLS33
ORACLE_TERM=vt100;
export ORACLE_TERM
NLS_LANG=American_America.KO16KSC5601;
export NLS_LANG
PATH=$ORACLE_HOME/bin:$PATH;
export PATH
TNS_ADMIN=$ORACLE_HOME/network/admin;
export TNS_ADMIN

# batch 기동 로그 파일
BATCHLOG=`date '+%y%m%d_batch.log'`

# 시간 배치 실행
echo `date '+%H:%M'` + "^Hour Batch START" >> "/home/batch/log/"$BATCHLOG
/home/batch/bin/run_hourbatch
echo `date '+%H:%M'` + "^Hour Batch END" >> "/home/batch/log/"$BATCHLOG

이렇게 하고 hourbatch.sh에 실행 권한을 주면
매시간 30분이 되면 run_hourbatch가 정상적으로 실행된다.