diff options
-rw-r--r-- | Makefile.am | 6 | ||||
-rw-r--r-- | README | 6 | ||||
-rw-r--r-- | rc/README | 73 | ||||
-rw-r--r-- | rc/debian.rc | 133 | ||||
-rw-r--r-- | rc/genrc.rc | 7 | ||||
-rw-r--r-- | rc/ping903.service | 13 | ||||
-rw-r--r-- | rc/slackware.rc | 80 |
7 files changed, 318 insertions, 0 deletions
diff --git a/Makefile.am b/Makefile.am index b4d8a80..7f08c55 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,2 +1,8 @@ ACLOCAL_AMFLAGS = -I m4 SUBDIRS=src doc +EXTRA_DIST=\ + rc/README\ + rc/debian.rc\ + rc/genrc.rc\ + rc/ping903.service\ + rc/slackware.rc @@ -169,6 +169,12 @@ makes use of it: retry_interval 1 } +* Startup scripts + +The package includes startup scripts for several major GNU/Linux +distributions. Please refer to rc/README for instructions on +adding ping903 to the operating system startup and shutdown sequences. + * Installation from a git clone If you are building from a clone of the Git repository, you will need diff --git a/rc/README b/rc/README new file mode 100644 index 0000000..40e716e --- /dev/null +++ b/rc/README @@ -0,0 +1,73 @@ +* Overview +This directory contains distribution-specific startup scripts for +Ping903. All scripts assume the daemon binary is installed at +/usr/sbin/ping903. If it's not the case, change the value of the +COMMAND variable, located at the start of the script. + +* debian.rc +The start script for Debian-based systems without systemd. Use it on +Debian 7, Ubuntu up to 16.04, etc. + +1. Copy the script and make it executable: + + cp debian.rc /etc/init.d/ping903 + chmod +x /etc/init.d/ping903 + +2. Register it in the startup and shutdown sequences: + + update-rc.d ping903 defaults + +Optionally, you may create the file /etc/default/903, which can +define two shell variables: + + START + Whether or not to start the service. Set it to "no", to + disable the service. Set it to "yes" (or simply remove it) + to enable the service. + DAEMON_OPTS + Additional options to be passed to the server. + +* ping903.service +Service definition for systems with systemd. Usage: + +1. Copy + cp ping903.service /etc/systemd/system/ + +2. Enable it + systemctl enable ping903 + +3. Reload the daemon + systemctl daemon-reload + +4. Start the service + systemctl start ping903 + +* slackware.rc +Slackware rc script. In fact, it is the most general of all and it +will work an all systems with no (or at a pinch, little) changes. +Usage: + +1. Copy it to where startup scripts live and make it executable. + cp slackware.rc /etc/rc.d/rc.pound903 + chmod +x /etc/rc.d/rc.pound903 + +2. Add the following line to your /etc/rc.d/rc.local: + /etc/rc.d/rc.pound903 start + +* genrc.rc +Startup script for installations using genrc +(https://puszcza.gnu.org.ua/projects/genrc). This is mostly for +Slackware, but can actually be used on any system. The usage on +Slackware is the same as described for slackware.rc. + + +Local Variables: +mode: outline +paragraph-separate: "[ ]*$" +version-control: never +End: + + + + + diff --git a/rc/debian.rc b/rc/debian.rc new file mode 100644 index 0000000..ed5e7a4 --- /dev/null +++ b/rc/debian.rc @@ -0,0 +1,133 @@ +#!/bin/sh +### BEGIN INIT INFO +# Provides: ping903 +# Required-Start: $local_fs $network $remote_fs $syslog +# Required-Stop: $local_fs $network $remote_fs $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: ICMP Monitoring Server +# Description: High-performance ICMP monitoring server +### END INIT INFO + +# Author: Sergey Poznyakoff <gray@gnu.org> + +PATH=/sbin:/usr/sbin:/bin:/usr/bin +DESC="ping903" +NAME=ping903 +DAEMON=/usr/sbin/ping903 +DAEMON_OPTS="" +CONFIG=/etc/ping903.conf +SCRIPTNAME=/etc/init.d/$NAME + +# Exit if the package is not installed +[ -x "$DAEMON" ] || exit 0 + +# Read configuration variable file if it is present +# The file is supposed to define at most two variables: +# START +# The only recongized value is "no", which disables +# the service. Any other value (or undefined) means to +# start the service. +# DAEMON_OPTS +# Command line to be passed to the server. Not needed, really. +[ -r /etc/default/$NAME ] && . /etc/default/$NAME + +[ "START" = no ] && exit 0 + +[ ! -f $CONFIG ] && exit 0 + +PIDFILE=$(sed -r -n 's/^[[:space:]]*pidfile[[:space:]]+//p' $CONFIG) +if [ -n "$PIDFILE" ]; then + PIDFILE_OPT="--pidfile $PIDFILE" +fi + +# Load the VERBOSE setting and other rcS variables +. /lib/init/vars.sh + +# Define LSB log_* functions. +# Depend on lsb-base (>= 3.2-14) to ensure that this file is present +# and status_of_proc is working. +. /lib/lsb/init-functions + +# +# Function that starts the daemon/service +# +do_start() { + # Return + # 0 if daemon has been started + # 1 if daemon was already running + # 2 if daemon could not be started + start-stop-daemon --start --quiet $PIDFILE_OPT \ + --exec $DAEMON --test > /dev/null \ + || return 1 + start-stop-daemon --start --quiet $PIDFILE_OPT \ + --exec $DAEMON -- $DAEMON_OPTS \ + || return 2 +} + +# +# Function that stops the daemon/service +# +do_stop() { + # Return + # 0 if daemon has been stopped + # 1 if daemon was already stopped + # 2 if daemon could not be stopped + # other if a failure occurred + start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 \ + $PIDFILE_OPT --name $NAME + RETVAL="$?" + [ "$RETVAL" = 2 ] && return 2 + rm -f $PIDFILE + return "$RETVAL" +} + +case "$1" in + start) + [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME" + do_start + case "$?" in + 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; + 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; + esac + ;; + stop) + [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" + do_stop + case "$?" in + 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; + 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; + esac + ;; + status) + status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? + ;; + restart|force-reload) + # + # If the "reload" option is implemented then remove the + # 'force-reload' alias + # + log_daemon_msg "Restarting $DESC" "$NAME" + do_stop + case "$?" in + 0|1) + do_start + case "$?" in + 0) log_end_msg 0 ;; + 1) log_end_msg 1 ;; # Old process is still running + *) log_end_msg 1 ;; # Failed to start + esac + ;; + *) + # Failed to stop + log_end_msg 1 + ;; + esac + ;; + *) + echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 + exit 3 + ;; +esac + +: diff --git a/rc/genrc.rc b/rc/genrc.rc new file mode 100644 index 0000000..d382cb7 --- /dev/null +++ b/rc/genrc.rc @@ -0,0 +1,7 @@ +#!/bin/sh + +export GENRC_COMMAND=/usr/sbin/ping903 +export GENRC_PID_FROM=PROC:ping903 +exec /sbin/genrc "$@" + + diff --git a/rc/ping903.service b/rc/ping903.service new file mode 100644 index 0000000..0d2cd6a --- /dev/null +++ b/rc/ping903.service @@ -0,0 +1,13 @@ +[Unit] +Description=Ping903 Monitoring Server +Documentation=man:ping903(8) +After=network-online.target + +[Service] +Type=forking +ExecStart=/usr/sbin/ping903 +PIDFile=/var/run/ping903.pid +Restart=on-failure + +[Install] +WantedBy=multi-user.target diff --git a/rc/slackware.rc b/rc/slackware.rc new file mode 100644 index 0000000..d006b9d --- /dev/null +++ b/rc/slackware.rc @@ -0,0 +1,80 @@ +#!/bin/sh + +PROGNAME=ping903 +COMMAND=/usr/sbin/ping903 +OPTIONS= +CONFIG=/etc/ping903.conf + +if [ ! -f $CONFIG ]; then + exit +fi + +PIDFILE=$(sed -r -n 's/^[[:space:]]*pidfile[[:space:]]+//p' $CONFIG) + +ping903_start() { + $COMMAND $OPTIONS +} + +ping903_stop() { + if [ -n "$PIDFILE" ]; then + if [ -f "$PIDFILE" ]; then + pid=$(head -1 $PIDFILE) + prog=$(ps -p $pid -ocomm=) + if [ $prog = $PROGNAME ]; then + kill -TERM $pid + return + fi + else + return + fi + fi + + killall $PROGNAME +} + +ping903_restart() { + ping903_stop + sleep 1 + ping903_start +} + +ping903_status() { + if [ -n "$PIDFILE" ]; then + if [ -f "$PIDFILE" ]; then + pid=$(head -1 $PIDFILE) + prog=$(ps -p $pid -ocomm=) + if [ $prog = $PROGNAME ]; then + echo "$PROGNAME is running (PID $pid)" + else + echo "$PROGNAME is not running (pidfile is stale)" + fi + else + echo "$PROGNAME is not running" + fi + else + pid=$(/sbin/pidof $PROGNAME | cut -d ' ' -f 1) + if [ -n "$pid" ]; then + echo "$PROGNAME is running (PID $pid)" + else + echo "$PROGNAME is not running" + fi + fi +} + +case "$1" in + 'start') + ping903_start + ;; + 'stop') + ping903_stop + ;; + 'restart') + ping903_restart + ;; + 'status') + ping903_status + ;; + *) + echo "usage $0 start|stop|restart|status" +esac + |