Warum kann Nagios die Oracle-Datenbank nicht über den Ereignishandler starten?

Warum kann Nagios die Oracle-Datenbank nicht über den Ereignishandler starten?

Ich versuche, meine Oracle-Datenbank mithilfe eines Eventhandler-Skripts zu starten, wenn sie ausfällt.

Die Objektkonfigurationsdatei oraclehost.cfgenthält:

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
}

Das commands.cfghat:

# '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$
}

Hier ist das oracle_handle.shSkript, das das Ereignishandlerskript ist.

#!/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

Es this_file.sqlenthält eine einzelne Zeile: startup. Sie wird zum Starten der Oracle-Datenbank verwendet.

Außerdem wird das logger "Then it went here"im Eventhandler-Skript vorhandene Ereignis in den Linux-Protokollen angezeigt /var/log/messages. Der WARNINGFall wird also ausgeführt.

Mein Nagios-Ereignisprotokoll zeigt:Nagios-Ereignisprotokoll-Skript

Wenn ich das Skript als nagiosBenutzer im Terminal ausführe, läuft es einwandfrei und die Oracle-Datenbank wird gestartet. Wenn nagioses jedoch über den Webserver ausgeführt wird, bleibt der Status im Nagios Web Monitor auf „Warnung“ und die Datenbank ist ausgefallen.

Der nagiosBenutzer befindet sich in sudoers.

Ich habe mehr als 10 Stunden damit verschwendet. Warum passiert das?

Warum startet Nagios meine Oracle-Datenbank nicht, wenn es das Eventhandler-Skript ausführt?

Antwort1

Ich habe es zum Laufen gebracht.

Der erste Fehler, den ich gemacht habe, bestand darin, das „ ORACLE_HOMEund“ ORACLE_PATHin meinem Eventhandler-Skript nicht zu exportieren.

Der zweite Fehler war in dieser Zeile:

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

Das this_file.sqlwar im . Als ich das Skript manuell aus dem Ordner \usr\local\nagios\libexec\eventhandlersausführte , war die Datei zugänglich. Nagios führt es nicht aus diesem Ordner aus. Als ich den vollständigen Pfad angab, funktionierte es.eventhandlersthis_file.sql

verwandte Informationen