etc: Add environment option to run init.d/ashd silently.
[ashd.git] / etc / debian / init.d-ashd
CommitLineData
9f61b28a
FT
1#!/bin/sh
2### BEGIN INIT INFO
3# Provides: ashd
4# Required-Start: $local_fs $remote_fs $network $syslog
5# Required-Stop: $local_fs $remote_fs $network $syslog
6# Default-Start: 2 3 4 5
7# Default-Stop: 0 1 6
8# Short-Description: The ashd HTTP server
9### END INIT INFO
10
11set -e
12
13. /lib/lsb/init-functions
14
15PATH=/usr/local/bin:/usr/local/sbin:$PATH
16HTPARSER="$(which htparser || true)"
17PIDFILE=/var/run/ashd.pid
4b7750b4
FT
18GRACE_PERIOD=10
19USER=nobody
20CHROOT=/var/tmp
9f61b28a 21PORTSPEC="plain"
c6b5fb27 22ROOTSPEC="dirplex /srv/www"
9f61b28a
FT
23[ -r /etc/default/locale ] && . /etc/default/locale
24[ -r /etc/default/ashd ] && . /etc/default/ashd
25[ -x "$HTPARSER" ] || exit 0
26
27start() {
28 export LANG
fdf5e496 29 [ -n "$SILENT_INIT" ] || log_daemon_msg "Starting HTTP server" "ashd"
4b7750b4 30 if start-stop-daemon -S -p "$PIDFILE" -qa "$HTPARSER" -- -Sf -p "$PIDFILE" -u "$USER" -r "$CHROOT" $PORTSPEC -- $ROOTSPEC; then
fdf5e496 31 [ -n "$SILENT_INIT" ] || log_success_msg
4b7750b4 32 else
fdf5e496 33 [ -n "$SILENT_INIT" ] || log_end_msg 1
4b7750b4 34 fi
9f61b28a
FT
35}
36
4b7750b4
FT
37kill_wholly() {
38 start-stop-daemon -K -p "$PIDFILE" -qx "$HTPARSER"
39}
40
41kill_listen() {
42 pid=$(cat "$PIDFILE" 2>/dev/null || true)
43 if [ -z "$pid" ]; then
44 log_failure_msg "no pid file"
45 return 1
46 fi
47 if ! kill -0 "$pid"; then
48 log_failure_msg "invalid saved pid"
49 return 1
50 fi
fdf5e496 51 [ -n "$SILENT_INIT" ] || log_progress_msg "listen"
4b7750b4
FT
52 kill -TERM "$pid"
53 for try in 0 1 2 3 4 5; do
54 sleep $try
55 case "$(wc -l <"$PIDFILE")" in
56 1) continue ;;
57 0|2) return 0 ;;
58 *)
59 log_failure_msg "could not parse pid file"
60 return 1
61 ;;
62 esac
63 done
64 log_failure_msg "htparser did not stop listening, killing it completely"
65 kill_wholly
9f61b28a 66 start-stop-daemon -K -p "$PIDFILE" -qx "$HTPARSER"
4b7750b4
FT
67 return 1
68}
69
70stop_listen() {
fdf5e496
FT
71 [ -n "$SILENT_INIT" ] || log_daemon_msg "Stopping HTTP server" "ashd"
72 if kill_listen; then
73 [ -n "$SILENT_INIT" ] || log_success_msg
74 else
75 [ -n "$SILENT_INIT" ] || log_end_msg $?
76 fi
9f61b28a
FT
77}
78
4b7750b4 79stop_gracefully() {
fdf5e496 80 [ -n "$SILENT_INIT" ] || log_daemon_msg "Stopping HTTP server" "ashd"
4b7750b4 81 if ! kill_listen ; then
fdf5e496 82 log_end_msg 1
4b7750b4
FT
83 return 1
84 fi
85 pid=$(cat "$PIDFILE" 2>/dev/null || true)
86 if kill -0 "$pid" 2>/dev/null; then
fdf5e496 87 [ -n "$SILENT_INIT" ] || log_progress_msg "waiting for remaining connections..."
4b7750b4
FT
88 for try in $(seq "$GRACE_PERIOD"); do
89 sleep 1
90 if ! kill -0 "$pid" 2>/dev/null; then
fdf5e496 91 [ -n "$SILENT_INIT" ] || log_success_msg
4b7750b4
FT
92 return 0
93 fi
94 done
95 else
fdf5e496 96 [ -n "$SILENT_INIT" ] || log_success_msg
4b7750b4
FT
97 return 0
98 fi
fdf5e496 99 [ -n "$SILENT_INIT" ] || log_progress_msg "terminating remaining connections"
4b7750b4 100 if kill_wholly; then
fdf5e496 101 [ -n "$SILENT_INIT" ] || log_success_msg
4b7750b4 102 else
fdf5e496 103 log_end_msg 1
4b7750b4
FT
104 fi
105}
106
9f61b28a
FT
107case "$1" in
108 start)
109 start
110 ;;
111 stop)
4b7750b4 112 stop_gracefully
9f61b28a
FT
113 ;;
114 restart)
4b7750b4
FT
115 stop_listen
116 # Truncate PID file to allow start-stop-daemon to work despite remaining connections.
117 >"$PIDFILE"
9f61b28a
FT
118 start
119 ;;
120esac
121
122exit 0