289 lines
6.8 KiB
Bash
289 lines
6.8 KiB
Bash
#!/bin/sh
|
|
#
|
|
# chkconfig: 345 99 01
|
|
# description: Nagios network monitor
|
|
# processname: nagios
|
|
# File : nagios
|
|
#
|
|
# Author : Jorge Sanchez Aymar (jsanchez@lanchile.cl)
|
|
#
|
|
# Changelog :
|
|
#
|
|
# 1999-07-09 Karl DeBisschop <kdebisschop@infoplease.com>
|
|
# - setup for autoconf
|
|
# - add reload function
|
|
# 1999-08-06 Ethan Galstad <egalstad@nagios.org>
|
|
# - Added configuration info for use with RedHat's chkconfig tool
|
|
# per Fran Boon's suggestion
|
|
# 1999-08-13 Jim Popovitch <jimpop@rocketship.com>
|
|
# - added variable for nagios/var directory
|
|
# - cd into nagios/var directory before creating tmp files on startup
|
|
# 1999-08-16 Ethan Galstad <egalstad@nagios.org>
|
|
# - Added test for rc.d directory as suggested by Karl DeBisschop
|
|
# 2000-07-23 Karl DeBisschop <kdebisschop@users.sourceforge.net>
|
|
# - Clean out redhat macros and other dependencies
|
|
# 2003-01-11 Ethan Galstad <egalstad@nagios.org>
|
|
# - Updated su syntax (Gary Miller)
|
|
#
|
|
# Description: Starts and stops the Nagios monitor
|
|
# used to provide network services status.
|
|
#
|
|
### BEGIN INIT INFO
|
|
# Provides: nagios
|
|
# Required-Start: $local_fs $syslog $network
|
|
# Required-Stop: $local_fs $syslog $network
|
|
# Default-Start: 2 3 4 5
|
|
# Default-Stop: 0 1 6
|
|
# Short-Description: Starts and stops the Nagios monitoring server
|
|
# Description: Starts and stops the Nagios monitoring server
|
|
### END INIT INFO
|
|
|
|
# Our install-time configuration.
|
|
NagiosBin=@bindir@/@nagios_name@
|
|
NagiosCfgFile=@sysconfdir@/nagios.cfg
|
|
NagiosCfgtestFile=@localstatedir@/nagios.configtest
|
|
NagiosStatusFile=@localstatedir@/status.dat
|
|
NagiosRetentionFile=@localstatedir@/retention.dat
|
|
NagiosCommandFile=@localstatedir@/rw/nagios.cmd
|
|
NagiosRunFile=@subsyslockfile@
|
|
NagiosVarDir=@localstatedir@
|
|
NagiosCGIDir=@cgibindir@
|
|
NagiosUser=@nagios_user@
|
|
NagiosGroup=@nagios_grp@
|
|
checkconfig="true"
|
|
|
|
# Load any extra environment variables for Nagios and its plugins.
|
|
if test -f /etc/sysconfig/nagios; then
|
|
. /etc/sysconfig/nagios
|
|
fi
|
|
|
|
# Automate addition of RAMDISK based on environment variables
|
|
USE_RAMDISK=${USE_RAMDISK:-0}
|
|
if test "$USE_RAMDISK" -ne 0 && test "$RAMDISK_SIZE"X != "X"; then
|
|
ramdisk=`mount |grep "${RAMDISK_DIR} type tmpfs"`
|
|
if [ "$ramdisk"X == "X" ]; then
|
|
if [ ! -d ${RAMDISK_DIR} ]; then
|
|
mkdir -p -m 0755 ${RAMDISK_DIR}
|
|
if [ -d ${RAMDISK_DIR} ]; then
|
|
NagiosUserUID=`id -u ${NagiosUser}`
|
|
NagiosGroupGID=`id -g ${NagiosGroup}`
|
|
mount -t tmpfs -o uid=${NagiosUserUID},gid=${NagiosGroupGID},size=${RAMDISK_SIZE}m tmpfs ${RAMDISK_DIR}
|
|
su ${NagiosUser} -c "mkdir -m 0755 ${RAMDISK_DIR}/checkresults"
|
|
else
|
|
echo "ERROR: Unable to create ramdisk directory (${RAMDISK_DIR})"
|
|
exit 1
|
|
fi
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
|
|
check_config ()
|
|
{
|
|
if test "$checkconfig" != "true"; then
|
|
return 0
|
|
fi
|
|
|
|
echo -n "Running configuration check... "
|
|
|
|
@BIN_RM@ -f "$NagiosCfgtestFile";
|
|
if test -e "$NagiosCfgtestFile"; then
|
|
echo "ERROR: Could not delete '$NagiosCfgtestFile'"
|
|
exit 8
|
|
fi
|
|
if ! su $NagiosUser -c "touch $NagiosCfgtestFile"; then
|
|
echo "ERROR: Could not create or update '$NagiosCfgtestFile'"
|
|
exit 8
|
|
fi
|
|
|
|
TMPFILE=$(mktemp /tmp/.configtest.XXXXXXXX)
|
|
$NagiosBin -vp $NagiosCfgFile > "$TMPFILE"
|
|
WARN=`grep ^"Total Warnings:" "$TMPFILE" |awk -F: '{print \$2}' |sed s/' '//g`
|
|
ERR=`grep ^"Total Errors:" "$TMPFILE" |awk -F: '{print \$2}' |sed s/' '//g`
|
|
|
|
if test "$WARN" = "0" && test "${ERR}" = "0"; then
|
|
echo "OK - Configuration check verified" > $NagiosCfgtestFile
|
|
@BIN_RM@ "$TMPFILE"
|
|
return 0
|
|
elif test "${ERR}" = "0"; then
|
|
# Write the errors to a file we can have a script watching for.
|
|
echo "WARNING: Warnings in config files - see log for details: $NagiosCfgtestFile" > $NagiosCfgtestFile
|
|
egrep -i "(^warning|^error)" "$TMPFILE" >> $NagiosCfgtestFile
|
|
@BIN_RM@ "$TMPFILE"
|
|
return 0
|
|
else
|
|
# Write the errors to a file we can have a script watching for.
|
|
echo "ERROR: Errors in config files - see log for details: $NagiosCfgtestFile" > $NagiosCfgtestFile
|
|
egrep -i "(^warning|^error)" "$TMPFILE" >> $NagiosCfgtestFile
|
|
cat "$TMPFILE"
|
|
exit 8
|
|
fi
|
|
}
|
|
|
|
|
|
status_nagios ()
|
|
{
|
|
if test -x $NagiosCGIDir/daemonchk.cgi; then
|
|
if $NagiosCGIDir/daemonchk.cgi -l $NagiosRunFile > /dev/null 2>&1; then
|
|
return 0
|
|
fi
|
|
else
|
|
if ps -p $NagiosPID > /dev/null 2>&1; then
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
return 1
|
|
}
|
|
|
|
printstatus_nagios ()
|
|
{
|
|
if status_nagios; then
|
|
echo "nagios (pid $NagiosPID) is running..."
|
|
else
|
|
echo "nagios is not running"
|
|
fi
|
|
}
|
|
|
|
killproc_nagios ()
|
|
{
|
|
@BIN_KILL@ -s "$1" $NagiosPID
|
|
}
|
|
|
|
pid_nagios ()
|
|
{
|
|
if test ! -f $NagiosRunFile; then
|
|
echo "No lock file found in $NagiosRunFile"
|
|
return 1
|
|
fi
|
|
|
|
NagiosPID=`head -n 1 $NagiosRunFile`
|
|
}
|
|
|
|
# Check that nagios exists.
|
|
if [ ! -f $NagiosBin ]; then
|
|
echo "Executable file $NagiosBin not found. Exiting."
|
|
exit 1
|
|
fi
|
|
|
|
# Check that nagios.cfg exists.
|
|
if [ ! -f $NagiosCfgFile ]; then
|
|
echo "Configuration file $NagiosCfgFile not found. Exiting."
|
|
exit 1
|
|
fi
|
|
|
|
# See how we were called.
|
|
case "$1" in
|
|
|
|
start)
|
|
echo -n "Starting nagios: "
|
|
|
|
check_config
|
|
|
|
if test -f $NagiosRunFile; then
|
|
NagiosPID=`head -n 1 $NagiosRunFile`
|
|
if status_nagios; then
|
|
echo "another instance of nagios is already running."
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
su $NagiosUser -c "touch $NagiosVarDir/nagios.log $NagiosRetentionFile"
|
|
@BIN_RM@ -f $NagiosCommandFile
|
|
touch $NagiosRunFile
|
|
$NagiosBin -d $NagiosCfgFile
|
|
|
|
echo "done."
|
|
;;
|
|
|
|
stop)
|
|
echo -n "Stopping nagios: "
|
|
|
|
pid_nagios
|
|
if [ $? -eq 1 ]; then
|
|
exit 0
|
|
fi
|
|
killproc_nagios TERM
|
|
|
|
# now we have to wait for nagios to exit and remove its
|
|
# own NagiosRunFile, otherwise a following "start" could
|
|
# happen, and then the exiting nagios will remove the
|
|
# new NagiosRunFile, allowing multiple nagios daemons
|
|
# to (sooner or later) run - John Sellens
|
|
#echo -n 'Waiting for nagios to exit .'
|
|
for i in {1..90}; do
|
|
if status_nagios > /dev/null; then
|
|
echo -n '.'
|
|
sleep 1
|
|
else
|
|
break
|
|
fi
|
|
done
|
|
if status_nagios > /dev/null; then
|
|
echo ""
|
|
echo "Warning - nagios did not exit in a timely manner - Killing it!"
|
|
killproc_nagios KILL
|
|
else
|
|
echo "done."
|
|
fi
|
|
|
|
@BIN_RM@ -f $NagiosStatusFile $NagiosRunFile $NagiosCommandFile
|
|
;;
|
|
|
|
status)
|
|
pid_nagios
|
|
if [ $? -eq 1 ]; then
|
|
exit 3
|
|
fi
|
|
printstatus_nagios
|
|
;;
|
|
|
|
checkconfig)
|
|
check_config
|
|
|
|
if [ $? -eq 0 ]; then
|
|
echo "OK."
|
|
else
|
|
echo "CONFIG ERROR! Check your Nagios configuration."
|
|
exit 1
|
|
fi
|
|
;;
|
|
|
|
restart)
|
|
check_config
|
|
|
|
$0 stop
|
|
$0 start
|
|
;;
|
|
|
|
reload|force-reload)
|
|
check_config
|
|
|
|
if test ! -f $NagiosRunFile; then
|
|
$0 start
|
|
else
|
|
pid_nagios
|
|
if status_nagios > /dev/null; then
|
|
echo -n "Reloading nagios configuration... "
|
|
killproc_nagios HUP
|
|
echo "done"
|
|
else
|
|
$0 stop
|
|
$0 start
|
|
fi
|
|
fi
|
|
;;
|
|
|
|
configtest)
|
|
$NagiosBin -vp $NagiosCfgFile
|
|
;;
|
|
|
|
*)
|
|
echo "Usage: nagios {start|stop|restart|reload|force-reload|status|checkconfig|configtest}"
|
|
exit 1
|
|
;;
|
|
|
|
esac
|
|
|
|
# End of this script
|