crontab에 등록한 쉘프로그램이 제대롤 작동을 안할때!!

     




서버작업을 하다가 오후 11시 55분에 DB에서 로그를 뽑을게 있어서 쉘 프로그램을 만들어서 crontab에 등록해 놨다. 


crontab -e 를 사용해 


55 23 * * * ~/map_cnt.sh 로 등록을 해놨는데~!


쉘이 실행되긴 실행되는데 제대로 된 값을 뽑아내지 못했다.


!!? 왜지~!


구글링해본결과 crontab은 유저 환경변수를 로드하지 못한다고 한다. 따라서 환경변수를 쉘안에 일일이 명시해줘야 원하는데로 돌아간다.


#!/bin/sh
sqlplus -s id/pass@db << EOF
select * from TR_TUJA_MAPUSER where MAP_NO like '%LAB%';
exit;
EOF

기존에 쉘은 위와 같았다. 단순히 sqlplus를 이용해 디비에 내용을 긁어오는 것인데... 그냥 쉘을 실행시키면 정상적으로 작동하지만, crontab에서 실행하면 작동하지 않는다.


따라서.. sqlplus의 위치를 정확히 명시해줘야 하는데,, 수정한 쉘은 다음과 같다.


#!/bin/sh
 
###################################################
# 당일 최대 동시접속자 구하기 및 USER_CNT 생성
###################################################
#####################################################################
#   ORACLE 9.2.0                                                   ##
#   -----------------------------------------------------------    ##
#   ORACLE Config                                                  ##
#####################################################################
export ORACLE_BASE=$HOME/scsref
export ORACLE_HOME=$ORACLE_BASE/oracle
export ORACLE_OWNER=oracle
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$ORACLE_HOME/network/lib:
export TNS_ADMIN=$ORACLE_HOME/network/admin
export NLS_LANG=American_America.KO16MSWIN949
export ORA_NLS10=$ORACLE_HOME/nls/data
export AIXTHREAD_SCOPE=S
export AIXTHREAD_MUTEX_DEBUG=N
export AIXTHREAD_COND_DEBUG=N
export AIXTHREAD_RWLOCK_DEBUG=N
export ORACLE_SID=RSNFORMD
PATH=$PATH:$ORACLE_HOME/bin
#####################################################################
 
sqlplus -s id/passwd@db<< EOF
select * from TR_TUJA_MAPUSER where MAP_NO like '%LAB%';
exit;
EOF


무엇인가 엄청나게 추가되었다. 사실 뭐 다 sqlplus를 쓰기위해 꼭 필요한 환경변수들은 아니지만, 그냥 기존에 쓰던거에서 긁어왔다 ㅋ


이제 crontab에서도 올바르게 실행되는것을 알 수 있었다.


추가로 자신이 등록한 환경변수를 모를때에는 


echo $PATH 명령어를 입력하면 자신이 등록한 환경변수가 쫘르륵 나온다. 이 경로를 쉘에 추가한다음에 crontab에 등록하면 제대로 실행될 것이다.


끗-

반응형

댓글

Designed by JB FACTORY