크론 작업이 실행되지 않음

크론 작업이 실행되지 않음

오라클 리눅스 5.10

oracle 사용자로서 "tblspc_usage.sh" 스크립트를 수동으로 성공적으로 실행할 수 있습니다. 나에게 보고서를 이메일로 보냈기 때문에 나는 이것을 알고 있습니다.

그러나 cron에서는 전혀 실행되지 않습니다. 로그 파일을 생성하지 않습니다.

[oracle@dub-ImrORA3 scripts]$ crontab -l
# user /bin/sh
SHELL=/bin/sh
# mail to oracle user
MAILTO=oracle
# run at 9:45 AM monday thur friday
45 09 * * 1-5 /home/oracle/scripts/tblspc_usage.sh 2>&1 /home/oracle/scripts/tblspc_usage.log

[oracle@dub-ImrORA3 scripts]$ ls -al tblspc_usage.sh
-rwxrwxr-- 1 oracle oinstall 2013 Jan 20 09:12 tblspc_usage.sh

좋습니다. /var/mail/oracle /home/oracle/scripts/tblspc_usage.sh에서 보낸 이메일은 다음과 같습니다. 15행: sqlplus: 명령을 찾을 수 없습니다. grep: body.log: 해당 파일 또는 디렉터리가 없습니다.

이것은 내 쉘 스크립트입니다.

#!/bin/sh
#
# tblspc_usage.sh
#=======================================
#
# Checks for tablespace usage exceeding 90% and email the details
# does not check undo or temp tablespaces
#=======================================
#
ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 ; export ORACLE_HOME
ORACLE_SID=IMR1 ; export ORACLE_SID
user="system"
pass="letmein" # bogus passwd

sqlplus -S $user/$pass <<EOF
   column "TOTAL ALLOC (MB)"      format 9,999,990.00
   column "TOTAL PHYS ALLOC (MB)" format 9,999,990.00
   column "USED (MB)"             format 9,999,990.00
   column "FREE (MB)"             format 9,999,990.00
   column "% USED"                format 990.00
   set echo off
   spool body.log
   select 
       a.tablespace_name,
       a.bytes_alloc/(1024*1024)               "TOTAL ALLOC (MB)",
       a.physical_bytes/(1024*1024)            "TOTAL PHYS ALLOC (MB)",
       nvl(b.tot_used,0)/(1024*1024)           "USED (MB)",
       (nvl(b.tot_used,0)/a.bytes_alloc)*100   "USED %"
   from 
       (select 
            tablespace_name,
            sum(bytes) physical_bytes,
            sum(decode(autoextensible,'NO',bytes,'YES',maxbytes)) bytes_alloc
        from 
            dba_data_files
        group by 
            tablespace_name ) a,
   (select 
        tablespace_name, 
        sum(bytes) tot_used
    from 
        dba_segments
    group by 
        tablespace_name ) b
  where 
        a.tablespace_name = b.tablespace_name (+)
  and 
        a.tablespace_name not in 
           (select distinct 
                   tablespace_name 
            from 
                   dba_temp_files
           )
  and      
        a.tablespace_name not like 'UNDO%'
  and
       ( nvl(b.tot_used,0)/a.bytes_alloc)*100 >= 90.00
  order by 1;

    spool off
    exit
EOF

   # if the word "TABLESPACE" exists in the spool file 
   # then at least one tablespace has usage over 90%
   if grep -q TABLESPACE "body.log";
   then
        cat /home/oracle/scripts/body.log | mailx -s "ORA3 - Tablespace(s) 90% Full" \
        [email protected]
   fi

답변1

메시지가 sqlplus: command not found답을주었습니다. 환경 변수 ORACLE_HOME을 설정했으므로 ORACLE_HOME을 내보낸 후 스크립트에 다음 줄을 입력하세요.

export PATH=$PATH:$ORACLE_HOME/bin

나는 또한 TNS_ADMIN 내보내기에 대해 미신적입니다.

export TNS_ADMIN=$ORACLE_HOME/network/admin

이것이 꼭 필요한 것인지는 모르겠습니다.

답변2

더 많은 정보로 게시물을 업데이트한 것 같습니다. Bruce가 말한 것처럼 ORACLE_HOME경로가 누락되었다는 오류가 발생합니다. 다음을 포함하도록 스크립트를 업데이트하세요.

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_SID=IMR1

나는 여전히 당신의 cron에서 이것을 고칠 것입니다:

# run at 9:45 AM monday thur friday
45 09 * * 1-5 /home/oracle/scripts/tblspc_usage.sh >> /home/oracle/scripts/tblspc_usage.log 2>&1
  • 로그에 첨부:>>
  • stderr를 로그 파일로 리디렉션합니다(이 예에서는 stdout과 동일).2>&1

관련 정보