Commit | Line | Data |
---|---|---|
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 | ||
11 | set -e | |
12 | ||
13 | . /lib/lsb/init-functions | |
14 | ||
15 | PATH=/usr/local/bin:/usr/local/sbin:$PATH | |
16 | HTPARSER="$(which htparser || true)" | |
17 | PIDFILE=/var/run/ashd.pid | |
4b7750b4 FT |
18 | GRACE_PERIOD=10 |
19 | USER=nobody | |
20 | CHROOT=/var/tmp | |
9f61b28a | 21 | PORTSPEC="plain" |
c6b5fb27 | 22 | ROOTSPEC="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 | ||
27 | start() { | |
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 |
37 | kill_wholly() { |
38 | start-stop-daemon -K -p "$PIDFILE" -qx "$HTPARSER" | |
39 | } | |
40 | ||
41 | kill_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 | ||
70 | stop_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 | 79 | stop_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 |
107 | case "$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 | ;; | |
120 | esac | |
121 | ||
122 | exit 0 |