#! /bin/sh DESC="SpamAssassin Statistics Server" NAME="spamd-stats-server" EXEC="/usr/bin/perl" DAEMON="$HOME/bin/server" DAEMON_ARGS="" PIDFILE="$HOME/var/$NAME.pid" . /lib/lsb/init-functions do_start() { /sbin/start-stop-daemon --start --quiet --pidfile "$PIDFILE" \ --exec "$EXEC" --startas "$DAEMON" --test > /dev/null || return 1 /sbin/start-stop-daemon --start --quiet --pidfile "$PIDFILE" \ --exec "$EXEC" --startas "$DAEMON" --background \ --make-pidfile -- $DAEMON_ARGS || return 2 } killtree() { local _pid=$1 local _sig=${2-TERM} for _child in $(ps -o pid --no-headers --ppid ${_pid}); do killtree ${_child} ${_sig} done kill -${_sig} ${_pid} } do_stop() { /sbin/start-stop-daemon --stop --quiet --test --pidfile "$PIDFILE" \ --exec "$EXEC" --startas "$DAEMON" && killtree "$(cat "$PIDFILE")" RETVAL="$?" [ "$RETVAL" = 2 ] && return 2 rm -f $PIDFILE return "$RETVAL" } case "$1" in start) log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in 0|1) log_end_msg 0 ;; 2) log_end_msg 1 ;; esac ;; stop) log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) log_end_msg 0 ;; 2) log_end_msg 1 ;; esac ;; restart) 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 ;; status) status_of_proc -p "$PIDFILE" "$DAEMON" "$NAME" && exit 0 || exit $? ;; *) echo "Usage: $0 (start|stop|restart|status)" >&2 exit 3 ;; esac :