#! /bin/sh # Written by Miquel van Smoorenburg . # Modified for Debian GNU/Linux # by Ian Murdock . # Clamav version by Magnus Ekdahl # Nagios version by Sean Finney and probably others # nagios2 version by Marc Haber # nagios3 version by Alexander Wirt ### BEGIN INIT INFO # Provides: nagios3 # Required-Start: $local_fs $remote_fs $syslog $named $network $time # Required-Stop: $local_fs $remote_fs $syslog $named $network # Should-Start: # Should-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: nagios host/service/network monitoring and management system # Description: nagios is a monitoring and management system for hosts, services and networks. ### END INIT INFO set -e . /lib/lsb/init-functions DAEMON=/usr/sbin/nagios3 NAME="nagios3" DESC="nagios3 monitoring daemon" NAGIOSCFG="/etc/nagios3/nagios.cfg" CGICFG="/etc/nagios3/cgi.cfg" NICENESS=5 [ -x "$DAEMON" ] || exit 0 [ -r /etc/default/nagios3 ] && . /etc/default/nagios3 # this is from madduck on IRC, 2006-07-06 # There should be a better possibility to give daemon error messages # and/or to log things log() { case "$1" in [[:digit:]]*) success=$1; shift;; *) :;; esac log_action_begin_msg "$1"; shift log_action_end_msg ${success:-0} "$*" } check_started () { #nagios3-core can be installed without -cgi if [ -e $CGICFG ]; then check_cmd=$(get_config nagios_check_command $CGICFG) if [ ! "$check_cmd" ]; then log 6 "unable to determine nagios_check_command from $CGICFG!" return 6 fi else #use hardcoded default version check_cmd="/usr/lib/nagios/plugins/check_nagios /var/cache/nagios3/status.dat 5 '/usr/sbin/nagios3'" fi eval $check_cmd >/dev/null if [ -f "$THEPIDFILE" ]; then pid="$(cat $THEPIDFILE)" if [ "$pid" ] && kill -0 $pid >/dev/null 2>/dev/null; then return 0 # Is started fi fi return 1 # Isn't started } # # get_config() # # grab a config option from nagios.cfg (or possibly another nagios config # file if specified). everything after the '=' is echo'd out, making # this a nice generalized way to get requested settings. # get_config () { if [ "$2" ]; then set -- `grep ^$1 $2 | sed 's@=@ @'` else set -- `grep ^$1 $NAGIOSCFG | sed 's@=@ @'` fi shift echo $* } check_config () { if $DAEMON -v $NAGIOSCFG >/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)" return 0 # Config is ok else # config is not okay, so let's barf the error to the user $DAEMON -v $NAGIOSCFG fi } check_named_pipe () { nagiospipe="$(get_config command_file)" if [ -p "$nagiospipe" ]; then return 1 # a named pipe exists elif [ -e "$nagiospipe" ];then return 1 else return 0 # no named pipe exists fi } if [ ! -f "$NAGIOSCFG" ]; then log_failure_msg "There is no configuration file for Nagios 3." exit 6 fi THEPIDFILE=$(get_config "lock_file") [ -n "$THEPIDFILE" ] || THEPIDFILE='/var/run/nagios3/nagios.pid' start () { DIRECTORY=$(dirname $THEPIDFILE) [ ! -d $DIRECTORY ] && mkdir -p $DIRECTORY chown nagios:nagios $DIRECTORY if ! check_started; then if ! check_named_pipe; then log_action_msg "named pipe exists - removing" rm -f $nagiospipe fi if check_config; then start_daemon -n $NICENESS -p $THEPIDFILE $DAEMON -d $NAGIOSCFG ret=$? else log_failure_msg "errors in config!" log_end_msg 1 exit 1 fi else log_warning_msg "already running!" fi return $ret } stop () { killproc -p $THEPIDFILE ret=$? if [ `pidof nagios3 | wc -l ` -gt 0 ]; then echo -n "Waiting for $NAME daemon to die.." cnt=0 while [ `pidof nagios3 | wc -l ` -gt 0 ]; do cnt=`expr "$cnt" + 1` if [ "$cnt" -gt 15 ]; then kill -9 `pidof nagios3` break fi sleep 1 echo -n "." done fi echo if ! check_named_pipe; then rm -f $nagiospipe fi if [ -n "$ret" ]; then return $ret else return $? fi } status() { log_action_begin_msg "checking $DAEMON" if check_started; then log_action_end_msg 0 "running" else if [ -e "$THEPIDFILE" ]; then log_action_end_msg 1 "$DAEMON failed" exit 1 else log_action_end_msg 1 "not running" exit 3 fi fi } reload () { # Check first if check_config; then if check_started; then killproc -p $THEPIDFILE $DAEMON 1 else log_warning_msg "Not running." fi else log_failure_msg "errors in config!" log_end_msg 6 exit 6 fi } check () { $DAEMON -v $NAGIOSCFG } case "$1" in start) log_daemon_msg "Starting $DESC" "$NAME" start log_end_msg $? ;; stop) log_daemon_msg "Stopping $DESC" "$NAME" stop log_end_msg $? ;; restart) log_daemon_msg "Restarting $DESC" "$NAME" stop if [ -z "$?" -o "$?" = "0" ]; then start fi log_end_msg $? ;; reload|force-reload) log_daemon_msg "Reloading $DESC configuration files" "$NAME" reload log_end_msg $? ;; status) status ;; check) check ;; *) log_failure_msg "Usage: $0 {start|stop|restart|reload|force-reload|status}" >&2 exit 1 ;; esac exit 0