X-Git-Url: https://git.adam-barratt.org.uk/?a=blobdiff_plain;f=modules%2Fnagios%2Ffiles%2Fnagios3.init;fp=modules%2Fnagios%2Ffiles%2Fnagios3.init;h=e650839723cf47a503ba4a919c6a3b1c4f9e8b02;hb=ba7d7945f415e31e7b67659e745257cab106daa3;hp=0000000000000000000000000000000000000000;hpb=f9f51fcde982ad009bf96b8898d310a401583173;p=mirror%2Fdsa-puppet.git diff --git a/modules/nagios/files/nagios3.init b/modules/nagios/files/nagios3.init new file mode 100755 index 000000000..e65083972 --- /dev/null +++ b/modules/nagios/files/nagios3.init @@ -0,0 +1,249 @@ +#! /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