Nagios がイベント ハンドラーを介して Oracle データベースを起動できないのはなぜですか?

Nagios がイベント ハンドラーを介して Oracle データベースを起動できないのはなぜですか?

イベント ハンドラー スクリプトを使用して、Oracle データベースがダウンしたときに起動しようとしています。

オブジェクト構成ファイルには次の内容oraclehost.cfgが含まれます。

define host {
host_name                       Test_Oracle
address                         127.0.0.1
check_command                   check-host-alive
check_interval                  3
retry_interval                  1
max_check_attempts              5
check_period                    24x7
process_perf_data               0
retain_nonstatus_information    0
contacts                        nagiosadmin
notifications_enabled           1
notification_interval           30
notification_period             24x7
notification_options            d,r
}
define service {
    host_name               Test_Oracle
    service_description     check_OraDB
    check_command           check_MyOracle
    event_handler           restart-oracle
    event_handler_enabled   1
    check_interval          5
    retry_interval          1
    max_check_attempts      5
    check_period            24x7
    notifications_enabled   1
    notification_interval   30
    notification_period     24x7
    notification_options    r,w,c
    contacts                nagiosadmin
}

には次commands.cfgのものがあります:

# 'Oracle DB' command definition
define command {
    command_name    check_MyOracle
    command_line    $USER1$/check_oracle_on.sh
}

# 'Oracle DB Handler' command definition
define command {
    command_name    restart-oracle
    command_line    $USER2$/oracle_handle.sh $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$
}

oracle_handle.sh以下はイベント ハンドラー スクリプトであるスクリプトです。

#!/usr/bin/sh
case "$1" in
OK)
    ;;
WARNING)
    logger "Then it went here"
    PATH=$PATH:$HOME/.local/bin:$HOME/bin:/u/oracle/server/oracle12c102/bin
    export PATH
    ORACLE_HOME=/u/oracle/server/oracle12c102
    export ORACLE_HOME
    ORACLE_SID=walinv
    export ORACLE_SID
    echo "ora123" |sqlplus sys@walinv as sysdba @this_file.sql
    ;;
UNKNOWN)
    ;;
CRITICAL)
    ;;
esac
exit 0

this_file.sqlには、 という 1 行が含まれています。これstartupは、Oracle Database を起動するために使用されます。

また、logger "Then it went here"イベント ハンドラー スクリプト内に存在する は、Linux ログに表示されます/var/log/messages。つまり、WARNINGケースは実行中です。

Nagios イベント ログには次のように表示されます:Nagios イベント ログ スクリプト

ユーザーとしてターミナルでスクリプトを実行するとnagios、スクリプトは正常に実行され、Oracle データベースが起動します。ただし、nagiosWeb サーバー経由で実行すると、Nagios Web モニターで状態が警告のままになり、データベースがダウンします。

ユーザーnagiosは sudoers に存在します。

これに 10 時間以上を無駄にしました。なぜこのようなことが起こるのでしょうか?

イベント ハンドラー スクリプトを実行するときに、Nagios が Oracle データベースを起動しないのはなぜですか?

答え1

動作しました。

私が犯した最初の間違いは、イベント ハンドラー スクリプトで をORACLE_HOMEエクスポートしなかったことです。ORACLE_PATH

2 番目の間違いは次の行にありました:

echo "ora123" |sqlplus sys@walinv as sysdba @this_file.sql

this_file.sqlは にありました。フォルダー\usr\local\nagios\libexec\eventhandlersからスクリプトを手動で実行していたのでeventhandlersthis_file.sqlファイルにアクセスできました。Nagios はこのフォルダーからは実行しません。フルパスを指定して動作させたところ。

関連情報