252 lines
5.6 KiB
Bash
252 lines
5.6 KiB
Bash
#! /bin/sh
|
|
# Written by Miquel van Smoorenburg <miquels@cistron.nl>.
|
|
# Modified for Debian GNU/Linux
|
|
# by Ian Murdock <imurdock@gnu.ai.mit.edu>.
|
|
# Clamav version by Magnus Ekdahl <magnus@debian.org>
|
|
# Nagios version by Sean Finney <seanius@debian.org> and probably others
|
|
# nagios2 version by Marc Haber <mh+debian-packages@zugschlus.de>
|
|
# nagios4 version by Alexander Wirt <formorer@debian.org>
|
|
|
|
### BEGIN INIT INFO
|
|
# Provides: nagios4
|
|
# 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/nagios4
|
|
NAME="nagios4"
|
|
DESC="nagios4 monitoring daemon"
|
|
NAGIOSCFG="/etc/nagios4/nagios.cfg"
|
|
CGICFG="/etc/nagios4/cgi.cfg"
|
|
NICENESS=5
|
|
|
|
[ -x "$DAEMON" ] || exit 0
|
|
[ -r /etc/default/nagios4 ] && . /etc/default/nagios4
|
|
|
|
|
|
# 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 () {
|
|
#nagios4-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/nagios4/status.dat 5 '/usr/sbin/nagios4'"
|
|
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/nagios4/nagios.pid'
|
|
|
|
start () {
|
|
|
|
if [ "$ENABLED" = "no" ]; then
|
|
log_warning_msg "Not starting Nagios3 - set ENABLED to yes in /etc/defrault/nagios4"
|
|
exit 0
|
|
fi
|
|
|
|
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 nagios4 | wc -l ` -gt 0 ]; then
|
|
echo -n "Waiting for $NAME daemon to die.."
|
|
cnt=0
|
|
while [ `pidof nagios4 | wc -l ` -gt 0 ]; do
|
|
cnt=`expr "$cnt" + 1`
|
|
if [ "$cnt" -gt 15 ]; then
|
|
kill -9 `pidof nagios4`
|
|
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
|
|
}
|
|
|
|
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
|