私は本質的に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!!!
任意の助けをいただければ幸いです。
ありがとうございます!
ああ、私はOracle Unbreakable Linuxを実行しています。5.7 – hat