#! /bin/sh
#
# init script for the nagios monitor
#
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/nagios
NAME=nagios
DESC=nagios
NICENESS=5
NAMEDPIPE=/var/run/nagios/nagios.cmd
PIDFILE=/var/run/nagios/nagios.pid
CONFIG=/etc/nagios/nagios.cfg
test -f $DAEMON || exit 0
# LC_NUMERIC must be set to POSIX for locales that use ',' in floating point
# numbers, otherwise some plugins will break.
LC_ALL=POSIX
export LC_ALL
set -e
#
# check_started()
#
# checks not only for the pid (which could be done by start-stop-daemon),
# but also for whether or not nagios is updating the status log (or database
# in the case of nagios-mysql and nagios-pgsql)
#
check_started () {
if [ -f /etc/nagios/check_nagios_db ]; then
if ! /etc/nagios/check_nagios_db > /dev/null; then
return 1 # isn't started
fi
elif [ -f /usr/lib/nagios/plugins/check_nagios ]; then
if ! /usr/lib/nagios/plugins/check_nagios -e 15 -F /var/log/nagios/status.log -C '/usr/sbin/nagios' > /dev/null; then
return 1 # isn't started
fi
fi
if [ -f $PIDFILE ]; then
pid=`cat $PIDFILE`
if [ "$pid" ] && ps $pid >/dev/null; then
return 0 # Is started
fi
fi
return 1 # Isn't started
}
get_config () {
set -- `grep ^$1 $CONFIG | sed 's@=@ @'`
echo $2
}
check_config () {
if $DAEMON -v $CONFIG >/dev/null 2>&1 ; then
# First get the user/group etc Nagios is running as
nagios_user=`get_config nagios_user`
nagios_group=`get_config nagios_group`
log_file=`get_config log_file`
log_dir=`dirname $log_file`
# Chown the log directory to this user/group so that
# Nagios can write there.
chown -R ${nagios_user}:$nagios_group $log_dir
return 0 # Config is ok
else
# config is not okay, so let's barf the error to the user
$DAEMON -v $CONFIG
return 1 # Config not ok
fi
}
check_named_pipe () {
if [ -p $NAMEDPIPE ]; then
return 1 # a named pipe exists
else
return 0 # no named pipe exists
fi
}
case "$1" in
start)
echo -n "Starting $DESC: "
if ! check_started; then
if ! check_named_pipe; then
echo "named pipe exists - removing"
rm -f $NAMEDPIPE
fi
if check_config; then
rm -f $NAMEDPIPE
start-stop-daemon --start --quiet \
--nicelevel $NICENESS \
--pidfile $PIDFILE \
--make-pidfile --background --exec $DAEMON -- $CONFIG
echo "$NAME."
else
echo "errors in config!"
fi
else
echo "already running"
fi
;;
stop)
echo -n "Stopping $DESC: "
start-stop-daemon --stop --quiet --pidfile $PIDFILE \
--oknodo --exec $DAEMON
echo "$NAME."
rm -f $PIDFILE
rm -f $NAMEDPIPE
;;
reload|force-reload)
echo "Reloading $DESC configuration files."
# Check first
if check_config; then
if check_started; then
start-stop-daemon --stop --signal 1 --quiet --pidfile \
$PIDFILE --exec $DAEMON
else
echo "Not running."
fi
else
echo "Errors in config file. Not reloading."
fi
;;
restart)
$0 stop
sleep 2
$0 start
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
exit 1
;;
esac
exit 0