summaryrefslogtreecommitdiffstats
path: root/server.init
blob: d4d5d379574b59711b4de757c72bc0ecf3136871 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#! /bin/sh
DESC="SpamAssassin Statistics Server"
NAME="spamd-stats-server"
 
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 "$DAEMON" --test > /dev/null || return 1
 
  /sbin/start-stop-daemon --start --quiet --pidfile "$PIDFILE" \
    --exec "$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 "$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
 
: