From 5b34e8552e6fce5288ef4721af50f334be2eec9d Mon Sep 17 00:00:00 2001 From: Sebastian Harl Date: Wed, 27 Apr 2011 09:08:49 +0200 Subject: [PATCH] -bin.pnp_gearman_worker.{default,init}: Init script for Gearman worker. The daemon is disabled by default. --- debian/changelog | 6 +- debian/control | 2 +- debian/copyright | 9 +- .../pnp4nagios-bin.pnp_gearman_worker.default | 11 + debian/pnp4nagios-bin.pnp_gearman_worker.init | 210 ++++++++++++++++++ debian/rules | 1 + 6 files changed, 236 insertions(+), 3 deletions(-) create mode 100644 debian/pnp4nagios-bin.pnp_gearman_worker.default create mode 100644 debian/pnp4nagios-bin.pnp_gearman_worker.init diff --git a/debian/changelog b/debian/changelog index ea12c32..90e8d5b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -17,8 +17,12 @@ pnp4nagios (0.6.12-1) unstable; urgency=low * debian/rules, debian/pnp4nagios-bin.install: - Do not install npcd.8 using dh_installman; this is done by the upstream Makefile now. + * debian/pnp4nagios-bin.pnp_gearman_worker.default, + pnp4nagios-bin.pnp_gearman_worker.init: + - Added init script for the PNP4Nagios Gearman worker daemon. + - The daemon is disabled by default. - -- Sebastian Harl Tue, 26 Apr 2011 14:46:18 +0200 + -- Sebastian Harl Wed, 27 Apr 2011 09:05:48 +0200 pnp4nagios (0.6.11-2) unstable; urgency=low diff --git a/debian/control b/debian/control index eddedc8..962bd80 100644 --- a/debian/control +++ b/debian/control @@ -26,7 +26,7 @@ Package: pnp4nagios-bin Architecture: any Depends: librrds-perl, adduser, ${shlibs:Depends}, ${misc:Depends} Recommends: pnp4nagios-web, nagios3 | icinga -Suggests: rrdcached +Suggests: rrdcached, perl, libgearman-client-perl, libcrypt-rijndael-perl Description: Nagios addon to create graphs from performance data (binaries) PNP is a graphing tool for Nagios that analyzes performance data provided by plugins and stores them automatically into Round Robin Databases (RRD). It diff --git a/debian/copyright b/debian/copyright index 2e27ac9..20c9e79 100644 --- a/debian/copyright +++ b/debian/copyright @@ -176,12 +176,19 @@ Copyright: License: BSD-2-clause Files: - debian/pnp4nagios-bin.init + debian/pnp4nagios-bin.npcd.init Copyright: 2007 Javier Fernandez-Sanguino 2009 Sven Velt License: BSD-2-clause +Files: + debian/pnp4nagios-bin.pnp_gearman_worker.init +Copyright: + 2007, Javier Fernandez-Sanguino + 2011, Sebastian Harl +License: BSD-2-clause + Files: debian/po/de.po Copyright: diff --git a/debian/pnp4nagios-bin.pnp_gearman_worker.default b/debian/pnp4nagios-bin.pnp_gearman_worker.default new file mode 100644 index 0000000..f36af0d --- /dev/null +++ b/debian/pnp4nagios-bin.pnp_gearman_worker.default @@ -0,0 +1,11 @@ +# Default settings for the pnp_gearman_worker init script. + +# Should the gearman worker daemon be started? ("yes" to enable) +RUN="no" + +# Additional options that are passed to the daemon. +DAEMON_OPTS="--config=/etc/pnp4nagios/process_perfdata.cfg" + +# Change to this user before starting the daemon. +# Note: the daemon refuses to start as root. +USER=nagios diff --git a/debian/pnp4nagios-bin.pnp_gearman_worker.init b/debian/pnp4nagios-bin.pnp_gearman_worker.init new file mode 100644 index 0000000..e45120b --- /dev/null +++ b/debian/pnp4nagios-bin.pnp_gearman_worker.init @@ -0,0 +1,210 @@ +#!/bin/sh +# +# init.d script for the Gearman worker daemon of PNP4Nagios +# +# Based on an example script for NPCD of Javier Fernandez-Sanguino +# Copyright (c) 2007 Javier Fernandez-Sanguino +# Copyright (c) 2011 Sebastian Harl +# +### BEGIN INIT INFO +# Provides: pnp_gearman_worker +# Required-Start: $network $local_fs $remote_fs +# Required-Stop: $network $local_fs $remote_fs +# Should-Start: +# Should-Stop: +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: PNP4Nagios Gearman worker daemon +# Description: Processing of Nagios' perf data in distributed setups +### END INIT INFO + +PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin + +DAEMON=/usr/lib/pnp4nagios/libexec/process_perfdata.pl +NAME=pnp_gearman_worker +DESC="PNP4Nagios Gearman worker daemon" + +PIDFILE=/var/run/pnp4nagios/$NAME.pid + +test -x $DAEMON || exit 0 + +. /lib/lsb/init-functions + +# Default options, these can be overriden by the information +# at /etc/default/$NAME +DAEMON_OPTS="" +DIETIME=10 +STARTTIME=2 +USER=nagios + +if [ -f /etc/default/pnp_gearman_worker ] ; then + . /etc/default/pnp_gearman_worker +fi + +if [ "x$RUN" != "xyes" ] ; then + echo "$NAME has been disabled in /etc/default/pnp_gearman_worker." + exit 0 +fi + +set -e + +# Check if a given process pid's cmdline matches a given name +running_pid() { + pid=$1 + name=$2 + [ -z "$pid" ] && return 1 + [ ! -d /proc/$pid ] && return 1 + cmd=`cat /proc/$pid/cmdline | tr "\000" "\n" | head -n 1 | cut -d : -f 1` + # Is this the expected server + [ "$cmd" != "$name" ] && return 1 + return 0 +} + +# Check if the process is running looking at /proc +# (works for all users) +running() { + # No pidfile, probably no daemon present + [ ! -f "$PIDFILE" ] && return 1 + pid=`cat $PIDFILE` + running_pid "$pid" $DAEMON \ + || running_pid "$pid" "/usr/bin/perl" || return 1 + return 0 +} + +# Start the process using the wrapper +start_server() { + if ! perl -MGearman::Worker -e '1;' > /dev/null 2>&1 \ + || ! perl -MMIME::Base64 -e '1;' > /dev/null 2>&1 \ + || ! perl -MCrypt::Rijndael -e '1;' > /dev/null 2>&1; then + echo "$NAME requires the Gearman::Worker, MIME::Base64 and" >&2 + echo "Crypt::Rijndael Perl modules. Make sure that the packages" >&2 + echo "perl, libgearman-client-perl and libcrypt-rijndael-perl" >&2 + echo "are installed." >&2 + exit 1 + fi + + if [ -d /var/run/pnp4nagios ]; then + chmod 755 /var/run/pnp4nagios + chown nagios.nagios /var/run/pnp4nagios + else + install -d -m 755 -o nagios -g nagios /var/run/pnp4nagios + fi + + start_opts="--start --quiet --oknodo --pidfile $PIDFILE" + if [ -n "$USER" ]; then + start_opts="$start_opts --chuid $USER" + fi + start-stop-daemon $start_opts --exec $DAEMON -- \ + --pidfile=$PIDFILE --gearman --daemon $DAEMON_OPTS + errcode=$? + return $errcode +} + +# Stop the process using the wrapper +stop_server() { + killproc -p $PIDFILE $DAEMON + errcode=$? + return $errcode +} + +# Force the process to die killing it manually +force_stop() { + [ ! -e "$PIDFILE" ] && return + if running ; then + kill -15 $pid + # Is it really dead? + sleep "$DIETIME"s + if running ; then + kill -9 $pid + sleep "$DIETIME"s + if running ; then + echo "Cannot kill $NAME (pid=$pid)!" + exit 1 + fi + fi + fi + rm -f $PIDFILE +} + +case "$1" in + start) + log_daemon_msg "Starting $DESC" "$NAME" + # Check if it's running first + if running ; then + log_progress_msg "apparently already running" + log_end_msg 0 + exit 0 + fi + if start_server ; then + # NOTE: Some servers might die some time after they start, + # this code will detect this issue if STARTTIME is set + # to a reasonable value + [ -n "$STARTTIME" ] && sleep $STARTTIME # Wait some time + if running ; then + # It's ok, the server started and is running + log_end_msg 0 + else + # It is not running after we did start + log_end_msg 1 + fi + else + # Either we could not start it + log_end_msg 1 + fi + ;; + stop) + log_daemon_msg "Stopping $DESC" "$NAME" + if running ; then + # Only stop the server if we see it running + errcode=0 + stop_server || errcode=$? + log_end_msg $errcode + else + # If it's not running don't do anything + log_progress_msg "apparently not running" + log_end_msg 0 + exit 0 + fi + ;; + force-stop) + # First try to stop gracefully the program + $0 stop + if running; then + # If it's still running try to kill it more forcefully + log_daemon_msg "Stopping (force) $DESC" "$NAME" + errcode=0 + force_stop || errcode=$? + log_end_msg $errcode + fi + ;; + restart|force-reload) + log_daemon_msg "Restarting $DESC" "$NAME" + errcode=0 + stop_server || errcode=$? + # Wait some sensible amount, some server need this + [ -n "$DIETIME" ] && sleep $DIETIME + start_server || errcode=$? + [ -n "$STARTTIME" ] && sleep $STARTTIME + running || errcode=$? + log_end_msg $errcode + ;; + status) + + log_daemon_msg "Checking status of $DESC" "$NAME" + if running ; then + log_progress_msg "running" + log_end_msg 0 + else + log_progress_msg "apparently not running" + log_end_msg 1 + exit 1 + fi + ;; + *) + N=/etc/init.d/$NAME + echo "Usage: $N {start|stop|force-stop|restart|force-reload|status}" >&2 + exit 1 + ;; +esac + +exit 0 diff --git a/debian/rules b/debian/rules index 18526be..9f9611a 100755 --- a/debian/rules +++ b/debian/rules @@ -182,6 +182,7 @@ binary-arch: build install dh_installexamples -a dh_installdebconf -a dh_installinit -ppnp4nagios-bin --name=npcd + dh_installinit -ppnp4nagios-bin --name=pnp_gearman_worker dh_installman -a dh_link -a dh_strip -a -- 2.30.2