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