#!/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 # - setup for autoconf # - add reload function # 1999-08-06 Ethan Galstad # - Added configuration info for use with RedHat's chkconfig tool # per Fran Boon's suggestion # 1999-08-13 Jim Popovitch # - added variable for nagios/var directory # - cd into nagios/var directory before creating tmp files on startup # 1999-08-16 Ethan Galstad # - Added test for rc.d directory as suggested by Karl DeBisschop # 2000-07-23 Karl DeBisschop # - Clean out redhat macros and other dependencies # 2003-01-11 Ethan Galstad # - 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