2012-05-09 10 views
0

私は本質的にsqlplusを呼び出し、その結果を変数Xに入れた簡単なlinuxスクリプトを作成しました。次にXを分析し、syslogメッセージを送信する必要があるかどうかを判断します。cronジョブをサイレントモードで実行しますか?

スクリプトは、コマンドラインから "oracle"として実行すると完全に機能します。しかし、私が "oracle"としてcrontabを使用してそれを私の仕事に追加すると、Xは満たされません。

私は間違っている可能性がありますが、cronはサイレントモードで動作し、Xは実際には満たされていないため、問題は手動で実行していると思われます。

はここに私の完全なスクリプトです
0,30 * * * * /scripts/isOracleUp.sh syslog 

は、ここで(Oracleなど)私のcrontab -l結果だ

#Created by: hatguy 
#Created date: May 8, 2012 
#File Attributes: Must be executable by "oracle" 
#Description: This script is used to determine if Oracle is up 
# and running. It does a simple select on dual to check this.  

DATE=`date` 
USER=$(whoami) 

if [ "$USER" != "oracle" ]; then 
    #note: $0 is the full path of whatever script is being run. 
    echo "You must run this as oracle. Try \"su - oracle -c $0\" instead" 
    exit; 
fi 

X=`sqlplus -s '/ as sysdba'<<eof 
set serveroutput on; 
set feedback off; 
set linesize 1000; 
select count(*) as count_col from dual; 
EXIT; 
eof` 

#This COULD be more elegant. The issue I'm having is that I can't figure out 
#which hidden characters are getting fed into X, so instead what I did was 
#check the string legth (26) and checked that COUNT_COL and 1 were where I 
#expected. 
if [ ${#X} -eq 26 ] && [ ${X:1:10} = "COUNT_COL" ] && [ ${X:24:3} = "1" ] ; then 
    echo "Connected" 
    #log to a text file that we checked and confirmed connection 
    if [ "$1" == "syslog" ]; then 
     echo "$DATE: Connected" >> /scripts/log/isOracleUp.log 
    fi 
else 
    echo "Not Connected" 
    echo "Details: $X" 
    if [ "$1" == "syslog" ]; then 
     echo "Sending this to syslog" 
     echo "==========================================================" >>    /scripts/log/isOracleUp.log 
     echo "$DATE: Disconnected" >> /scripts/log/isOracleUp.log 
     echo "Message from sqlplus: $X" >> /scripts/log/isOracleUp.log 
     /scripts/sendMessageToSyslog.sh "PROD Oracle is DOWN!!!" 
     /scripts/sendMessageToSyslog.sh "PROD Details: $X" 
    fi 
fi 

端末からoracleとして実行すると出力は次のとおりです。

Wed May 9 10:03:07 MDT 2012: Disconnected 
Message from sqlplus: select count(*) as count_col from dual 
* 
ERROR at line 1: 
ORA-01034: ORACLE not available 
Process ID: 0 
Session ID: 0 Serial number: 0 

oracleのcrontabジョブを実行すると、ログ出力が表示されます。

Wed May 9 11:00:04 MDT 2012: Disconnected 
Message from sqlplus: 

とsyslogに:私は新しいLinuxユーザーだと、これが私の最初のLinuxのスクリプトであるとして

PROD Details: 
PROD Oracle is DOWN!!! 

任意の助けをいただければ幸いです。

ありがとうございます!

+0

ああ、私はOracle Unbreakable Linuxを実行しています。5.7 – hat

答えて

0

私のOracleのスキルはかなり限られていますが、ORACLE_SIDとORACLE_HOMEを設定する必要はありませんか?

これらの変数をコマンドラインから確認し、これらの変数をcron内に設定して再試行します。

+0

それはありがたいです。私のスクリプトの設定では、ORACLE_SID = とORACLE_HOME = というトリックがありました。スクリプトを直接実行すると、これらの変数はすでに設定されていましたが、cronジョブとしては設定されていませんでした。あなたの返答をありがとう、私はちょうどあきらめていた! – hat

関連する問題