
Ich versuche, meine Oracle-Datenbank mithilfe eines Eventhandler-Skripts zu starten, wenn sie ausfällt.
Die Objektkonfigurationsdatei oraclehost.cfg
enthä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.cfg
hat:
# '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.sh
Skript, 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.sql
enthä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 WARNING
Fall wird also ausgeführt.
Mein Nagios-Ereignisprotokoll zeigt:Nagios-Ereignisprotokoll-Skript
Wenn ich das Skript als nagios
Benutzer im Terminal ausführe, läuft es einwandfrei und die Oracle-Datenbank wird gestartet. Wenn nagios
es jedoch über den Webserver ausgeführt wird, bleibt der Status im Nagios Web Monitor auf „Warnung“ und die Datenbank ist ausgefallen.
Der nagios
Benutzer 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_HOME
und“ ORACLE_PATH
in 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.sql
war im . Als ich das Skript manuell aus dem Ordner \usr\local\nagios\libexec\eventhandlers
ausführte , war die Datei zugänglich. Nagios führt es nicht aus diesem Ordner aus. Als ich den vollständigen Pfad angab, funktionierte es.eventhandlers
this_file.sql