root / debian / init.d @ 0e219942
History | View | Annotate | Download (6.8 kB)
1 | e0be7f21 | Apollon Oikonomopoulos | #!/bin/sh |
---|---|---|---|
2 | e0be7f21 | Apollon Oikonomopoulos | # |
3 | e0be7f21 | Apollon Oikonomopoulos | # This is free software; you may redistribute it and/or modify |
4 | e0be7f21 | Apollon Oikonomopoulos | # it under the terms of the GNU General Public License as |
5 | e0be7f21 | Apollon Oikonomopoulos | # published by the Free Software Foundation; either version 2, |
6 | e0be7f21 | Apollon Oikonomopoulos | # or (at your option) any later version. |
7 | e0be7f21 | Apollon Oikonomopoulos | # |
8 | e0be7f21 | Apollon Oikonomopoulos | # This is distributed in the hope that it will be useful, but |
9 | e0be7f21 | Apollon Oikonomopoulos | # WITHOUT ANY WARRANTY; without even the implied warranty of |
10 | e0be7f21 | Apollon Oikonomopoulos | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
11 | e0be7f21 | Apollon Oikonomopoulos | # GNU General Public License for more details. |
12 | e0be7f21 | Apollon Oikonomopoulos | # |
13 | e0be7f21 | Apollon Oikonomopoulos | # You should have received a copy of the GNU General Public License with |
14 | e0be7f21 | Apollon Oikonomopoulos | # the Debian operating system, in /usr/share/common-licenses/GPL; if |
15 | e0be7f21 | Apollon Oikonomopoulos | # not, write to the Free Software Foundation, Inc., 59 Temple Place, |
16 | e0be7f21 | Apollon Oikonomopoulos | # Suite 330, Boston, MA 02111-1307 USA |
17 | e0be7f21 | Apollon Oikonomopoulos | # |
18 | e0be7f21 | Apollon Oikonomopoulos | ### BEGIN INIT INFO |
19 | e0be7f21 | Apollon Oikonomopoulos | # Provides: nfdhcpd |
20 | e0be7f21 | Apollon Oikonomopoulos | # Required-Start: $network $local_fs $remote_fs |
21 | e0be7f21 | Apollon Oikonomopoulos | # Required-Stop: $remote_fs |
22 | e0be7f21 | Apollon Oikonomopoulos | # Should-Start: |
23 | e0be7f21 | Apollon Oikonomopoulos | # Should-Stop: |
24 | e0be7f21 | Apollon Oikonomopoulos | # Default-Start: 2 3 4 5 |
25 | e0be7f21 | Apollon Oikonomopoulos | # Default-Stop: 0 1 6 |
26 | e0be7f21 | Apollon Oikonomopoulos | # Short-Description: NFQueue DHCP/RA server |
27 | e0be7f21 | Apollon Oikonomopoulos | ### END INIT INFO |
28 | e0be7f21 | Apollon Oikonomopoulos | |
29 | e0be7f21 | Apollon Oikonomopoulos | PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin |
30 | e0be7f21 | Apollon Oikonomopoulos | |
31 | e0be7f21 | Apollon Oikonomopoulos | DAEMON=/usr/sbin/nfdhcpd |
32 | e0be7f21 | Apollon Oikonomopoulos | NAME=nfdhcpd |
33 | e0be7f21 | Apollon Oikonomopoulos | DESC="NFQUEUE-based DHCP/RA server" |
34 | e0be7f21 | Apollon Oikonomopoulos | LOGDIR=/var/log/nfdhcpd |
35 | e0be7f21 | Apollon Oikonomopoulos | |
36 | e0be7f21 | Apollon Oikonomopoulos | PIDFILE=/var/run/$NAME.pid |
37 | e0be7f21 | Apollon Oikonomopoulos | |
38 | e0be7f21 | Apollon Oikonomopoulos | test -x $DAEMON || exit 0 |
39 | e0be7f21 | Apollon Oikonomopoulos | |
40 | e0be7f21 | Apollon Oikonomopoulos | . /lib/lsb/init-functions |
41 | e0be7f21 | Apollon Oikonomopoulos | |
42 | e0be7f21 | Apollon Oikonomopoulos | # Default options, these can be overriden by the information |
43 | e0be7f21 | Apollon Oikonomopoulos | # at /etc/default/$NAME |
44 | e0be7f21 | Apollon Oikonomopoulos | DAEMON_OPTS="" # Additional options given to the server |
45 | e0be7f21 | Apollon Oikonomopoulos | |
46 | e0be7f21 | Apollon Oikonomopoulos | DIETIME=2 # Time to wait for the server to die, in seconds |
47 | e0be7f21 | Apollon Oikonomopoulos | # If this value is set too low you might not |
48 | e0be7f21 | Apollon Oikonomopoulos | # let some servers to die gracefully and |
49 | e0be7f21 | Apollon Oikonomopoulos | # 'restart' will not work |
50 | e0be7f21 | Apollon Oikonomopoulos | |
51 | e0be7f21 | Apollon Oikonomopoulos | STARTTIME=1 # Time to wait for the server to start, in seconds |
52 | e0be7f21 | Apollon Oikonomopoulos | # If this value is set each time the server is |
53 | e0be7f21 | Apollon Oikonomopoulos | # started (on start or restart) the script will |
54 | e0be7f21 | Apollon Oikonomopoulos | # stall to try to determine if it is running |
55 | e0be7f21 | Apollon Oikonomopoulos | # If it is not set and the server takes time |
56 | e0be7f21 | Apollon Oikonomopoulos | # to setup a pid file the log message might |
57 | e0be7f21 | Apollon Oikonomopoulos | # be a false positive (says it did not start |
58 | e0be7f21 | Apollon Oikonomopoulos | # when it actually did) |
59 | e0be7f21 | Apollon Oikonomopoulos | |
60 | e0be7f21 | Apollon Oikonomopoulos | LOGFILE=$LOGDIR/$NAME.log # Server logfile |
61 | e0be7f21 | Apollon Oikonomopoulos | #DAEMONUSER=nfdhcp # Users to run the daemons as. If this value |
62 | e0be7f21 | Apollon Oikonomopoulos | # is set start-stop-daemon will chuid the server |
63 | e0be7f21 | Apollon Oikonomopoulos | |
64 | e0be7f21 | Apollon Oikonomopoulos | # Include defaults if available |
65 | e0be7f21 | Apollon Oikonomopoulos | if [ -f /etc/default/$NAME ] ; then |
66 | e0be7f21 | Apollon Oikonomopoulos | . /etc/default/$NAME |
67 | e0be7f21 | Apollon Oikonomopoulos | fi |
68 | e0be7f21 | Apollon Oikonomopoulos | |
69 | e0be7f21 | Apollon Oikonomopoulos | # Use this if you want the user to explicitly set 'RUN' in |
70 | e0be7f21 | Apollon Oikonomopoulos | # /etc/default/ |
71 | e0be7f21 | Apollon Oikonomopoulos | if [ "x$RUN" != "xyes" ] ; then |
72 | e0be7f21 | Apollon Oikonomopoulos | log_failure_msg "$NAME disabled, please adjust the configuration to your needs " |
73 | e0be7f21 | Apollon Oikonomopoulos | log_failure_msg "and then set RUN to 'yes' in /etc/default/$NAME to enable it." |
74 | e0be7f21 | Apollon Oikonomopoulos | exit 1 |
75 | e0be7f21 | Apollon Oikonomopoulos | fi |
76 | e0be7f21 | Apollon Oikonomopoulos | |
77 | e0be7f21 | Apollon Oikonomopoulos | # Check that the user exists (if we set a user) |
78 | e0be7f21 | Apollon Oikonomopoulos | # Does the user exist? |
79 | e0be7f21 | Apollon Oikonomopoulos | set -e |
80 | e0be7f21 | Apollon Oikonomopoulos | |
81 | e0be7f21 | Apollon Oikonomopoulos | running_pid() { |
82 | e0be7f21 | Apollon Oikonomopoulos | # Check if a given process pid's cmdline matches a given name |
83 | e0be7f21 | Apollon Oikonomopoulos | pid=$1 |
84 | e0be7f21 | Apollon Oikonomopoulos | name=$2 |
85 | e0be7f21 | Apollon Oikonomopoulos | [ -z "$pid" ] && return 1 |
86 | e0be7f21 | Apollon Oikonomopoulos | [ ! -d /proc/$pid ] && return 1 |
87 | e0be7f21 | Apollon Oikonomopoulos | cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1 |cut -d : -f 1` |
88 | e0be7f21 | Apollon Oikonomopoulos | # Is this the expected server |
89 | e0be7f21 | Apollon Oikonomopoulos | [ "$cmd" != "$name" ] && return 1 |
90 | e0be7f21 | Apollon Oikonomopoulos | return 0 |
91 | e0be7f21 | Apollon Oikonomopoulos | } |
92 | e0be7f21 | Apollon Oikonomopoulos | |
93 | e0be7f21 | Apollon Oikonomopoulos | running() { |
94 | e0be7f21 | Apollon Oikonomopoulos | # Check if the process is running looking at /proc |
95 | e0be7f21 | Apollon Oikonomopoulos | # (works for all users) |
96 | e0be7f21 | Apollon Oikonomopoulos | |
97 | e0be7f21 | Apollon Oikonomopoulos | # No pidfile, probably no daemon present |
98 | e0be7f21 | Apollon Oikonomopoulos | [ ! -f "$PIDFILE" ] && return 1 |
99 | e0be7f21 | Apollon Oikonomopoulos | pid=`cat $PIDFILE` |
100 | e0be7f21 | Apollon Oikonomopoulos | running_pid $pid python || return 1 |
101 | e0be7f21 | Apollon Oikonomopoulos | return 0 |
102 | e0be7f21 | Apollon Oikonomopoulos | } |
103 | e0be7f21 | Apollon Oikonomopoulos | |
104 | e0be7f21 | Apollon Oikonomopoulos | start_server() { |
105 | 0e219942 | Costas Drogos | # /var/run may be volatile, so we need to ensure that |
106 | 0e219942 | Costas Drogos | # /var/run/$NAME exists here as well as in postinst |
107 | 0e219942 | Costas Drogos | if [ ! -d /var/run/$NAME ]; then |
108 | 0e219942 | Costas Drogos | mkdir /var/run/$NAME || return 1 |
109 | 0e219942 | Costas Drogos | chown nobody:nogroup /var/run/$NAME || return 1 |
110 | 0e219942 | Costas Drogos | fi |
111 | e0be7f21 | Apollon Oikonomopoulos | start_daemon -p $PIDFILE $DAEMON $DAEMON_OPTS |
112 | e0be7f21 | Apollon Oikonomopoulos | errcode=$? |
113 | e0be7f21 | Apollon Oikonomopoulos | return $errcode |
114 | e0be7f21 | Apollon Oikonomopoulos | } |
115 | e0be7f21 | Apollon Oikonomopoulos | |
116 | e0be7f21 | Apollon Oikonomopoulos | stop_server() { |
117 | e0be7f21 | Apollon Oikonomopoulos | killproc -p $PIDFILE $DAEMON |
118 | e0be7f21 | Apollon Oikonomopoulos | rrcode=$? |
119 | e0be7f21 | Apollon Oikonomopoulos | return $errcode |
120 | e0be7f21 | Apollon Oikonomopoulos | } |
121 | e0be7f21 | Apollon Oikonomopoulos | |
122 | e0be7f21 | Apollon Oikonomopoulos | reload_server() { |
123 | e0be7f21 | Apollon Oikonomopoulos | [ ! -f "$PIDFILE" ] && return 1 |
124 | e0be7f21 | Apollon Oikonomopoulos | pid=pidofproc $PIDFILE # This is the daemon's pid |
125 | e0be7f21 | Apollon Oikonomopoulos | # Send a SIGHUP |
126 | e0be7f21 | Apollon Oikonomopoulos | kill -1 $pid |
127 | e0be7f21 | Apollon Oikonomopoulos | return $? |
128 | e0be7f21 | Apollon Oikonomopoulos | } |
129 | e0be7f21 | Apollon Oikonomopoulos | |
130 | e0be7f21 | Apollon Oikonomopoulos | force_stop() { |
131 | e0be7f21 | Apollon Oikonomopoulos | # Force the process to die killing it manually |
132 | e0be7f21 | Apollon Oikonomopoulos | [ ! -e "$PIDFILE" ] && return |
133 | e0be7f21 | Apollon Oikonomopoulos | if running ; then |
134 | e0be7f21 | Apollon Oikonomopoulos | kill -15 $pid |
135 | e0be7f21 | Apollon Oikonomopoulos | # Is it really dead? |
136 | e0be7f21 | Apollon Oikonomopoulos | sleep "$DIETIME"s |
137 | e0be7f21 | Apollon Oikonomopoulos | if running ; then |
138 | e0be7f21 | Apollon Oikonomopoulos | kill -9 $pid |
139 | e0be7f21 | Apollon Oikonomopoulos | sleep "$DIETIME"s |
140 | e0be7f21 | Apollon Oikonomopoulos | if running ; then |
141 | e0be7f21 | Apollon Oikonomopoulos | echo "Cannot kill $NAME (pid=$pid)!" |
142 | e0be7f21 | Apollon Oikonomopoulos | exit 1 |
143 | e0be7f21 | Apollon Oikonomopoulos | fi |
144 | e0be7f21 | Apollon Oikonomopoulos | fi |
145 | e0be7f21 | Apollon Oikonomopoulos | fi |
146 | e0be7f21 | Apollon Oikonomopoulos | rm -f $PIDFILE |
147 | e0be7f21 | Apollon Oikonomopoulos | } |
148 | e0be7f21 | Apollon Oikonomopoulos | |
149 | e0be7f21 | Apollon Oikonomopoulos | |
150 | e0be7f21 | Apollon Oikonomopoulos | case "$1" in |
151 | e0be7f21 | Apollon Oikonomopoulos | start) |
152 | e0be7f21 | Apollon Oikonomopoulos | log_daemon_msg "Starting $DESC " "$NAME" |
153 | e0be7f21 | Apollon Oikonomopoulos | # Check if it's running first |
154 | e0be7f21 | Apollon Oikonomopoulos | if running ; then |
155 | e0be7f21 | Apollon Oikonomopoulos | log_progress_msg "apparently already running" |
156 | e0be7f21 | Apollon Oikonomopoulos | log_end_msg 0 |
157 | e0be7f21 | Apollon Oikonomopoulos | exit 0 |
158 | e0be7f21 | Apollon Oikonomopoulos | fi |
159 | e0be7f21 | Apollon Oikonomopoulos | if start_server ; then |
160 | e0be7f21 | Apollon Oikonomopoulos | # NOTE: Some servers might die some time after they start, |
161 | e0be7f21 | Apollon Oikonomopoulos | # this code will detect this issue if STARTTIME is set |
162 | e0be7f21 | Apollon Oikonomopoulos | # to a reasonable value |
163 | e0be7f21 | Apollon Oikonomopoulos | [ -n "$STARTTIME" ] && sleep $STARTTIME # Wait some time |
164 | e0be7f21 | Apollon Oikonomopoulos | if running ; then |
165 | e0be7f21 | Apollon Oikonomopoulos | # It's ok, the server started and is running |
166 | e0be7f21 | Apollon Oikonomopoulos | log_end_msg 0 |
167 | e0be7f21 | Apollon Oikonomopoulos | else |
168 | e0be7f21 | Apollon Oikonomopoulos | # It is not running after we did start |
169 | e0be7f21 | Apollon Oikonomopoulos | log_end_msg 1 |
170 | e0be7f21 | Apollon Oikonomopoulos | fi |
171 | e0be7f21 | Apollon Oikonomopoulos | else |
172 | e0be7f21 | Apollon Oikonomopoulos | # Either we could not start it |
173 | e0be7f21 | Apollon Oikonomopoulos | log_end_msg 1 |
174 | e0be7f21 | Apollon Oikonomopoulos | fi |
175 | e0be7f21 | Apollon Oikonomopoulos | ;; |
176 | e0be7f21 | Apollon Oikonomopoulos | stop) |
177 | e0be7f21 | Apollon Oikonomopoulos | log_daemon_msg "Stopping $DESC" "$NAME" |
178 | e0be7f21 | Apollon Oikonomopoulos | if running ; then |
179 | e0be7f21 | Apollon Oikonomopoulos | # Only stop the server if we see it running |
180 | e0be7f21 | Apollon Oikonomopoulos | errcode=0 |
181 | e0be7f21 | Apollon Oikonomopoulos | stop_server || errcode=$? |
182 | e0be7f21 | Apollon Oikonomopoulos | log_end_msg $errcode |
183 | e0be7f21 | Apollon Oikonomopoulos | else |
184 | e0be7f21 | Apollon Oikonomopoulos | # If it's not running don't do anything |
185 | e0be7f21 | Apollon Oikonomopoulos | log_progress_msg "apparently not running" |
186 | e0be7f21 | Apollon Oikonomopoulos | log_end_msg 0 |
187 | e0be7f21 | Apollon Oikonomopoulos | exit 0 |
188 | e0be7f21 | Apollon Oikonomopoulos | fi |
189 | e0be7f21 | Apollon Oikonomopoulos | ;; |
190 | e0be7f21 | Apollon Oikonomopoulos | force-stop) |
191 | e0be7f21 | Apollon Oikonomopoulos | # First try to stop gracefully the program |
192 | e0be7f21 | Apollon Oikonomopoulos | $0 stop |
193 | e0be7f21 | Apollon Oikonomopoulos | if running; then |
194 | e0be7f21 | Apollon Oikonomopoulos | # If it's still running try to kill it more forcefully |
195 | e0be7f21 | Apollon Oikonomopoulos | log_daemon_msg "Stopping (force) $DESC" "$NAME" |
196 | e0be7f21 | Apollon Oikonomopoulos | errcode=0 |
197 | e0be7f21 | Apollon Oikonomopoulos | force_stop || errcode=$? |
198 | e0be7f21 | Apollon Oikonomopoulos | log_end_msg $errcode |
199 | e0be7f21 | Apollon Oikonomopoulos | fi |
200 | e0be7f21 | Apollon Oikonomopoulos | ;; |
201 | e0be7f21 | Apollon Oikonomopoulos | restart|force-reload) |
202 | e0be7f21 | Apollon Oikonomopoulos | log_daemon_msg "Restarting $DESC" "$NAME" |
203 | e0be7f21 | Apollon Oikonomopoulos | errcode=0 |
204 | e0be7f21 | Apollon Oikonomopoulos | stop_server || errcode=$? |
205 | e0be7f21 | Apollon Oikonomopoulos | # Wait some sensible amount, some server need this |
206 | e0be7f21 | Apollon Oikonomopoulos | [ -n "$DIETIME" ] && sleep $DIETIME |
207 | e0be7f21 | Apollon Oikonomopoulos | start_server || errcode=$? |
208 | e0be7f21 | Apollon Oikonomopoulos | [ -n "$STARTTIME" ] && sleep $STARTTIME |
209 | e0be7f21 | Apollon Oikonomopoulos | running || errcode=$? |
210 | e0be7f21 | Apollon Oikonomopoulos | log_end_msg $errcode |
211 | e0be7f21 | Apollon Oikonomopoulos | ;; |
212 | e0be7f21 | Apollon Oikonomopoulos | status) |
213 | e0be7f21 | Apollon Oikonomopoulos | |
214 | e0be7f21 | Apollon Oikonomopoulos | log_daemon_msg "Checking status of $DESC" "$NAME" |
215 | e0be7f21 | Apollon Oikonomopoulos | if running ; then |
216 | e0be7f21 | Apollon Oikonomopoulos | log_progress_msg "running" |
217 | e0be7f21 | Apollon Oikonomopoulos | log_end_msg 0 |
218 | e0be7f21 | Apollon Oikonomopoulos | else |
219 | e0be7f21 | Apollon Oikonomopoulos | log_progress_msg "apparently not running" |
220 | e0be7f21 | Apollon Oikonomopoulos | log_end_msg 1 |
221 | e0be7f21 | Apollon Oikonomopoulos | exit 1 |
222 | e0be7f21 | Apollon Oikonomopoulos | fi |
223 | e0be7f21 | Apollon Oikonomopoulos | ;; |
224 | e0be7f21 | Apollon Oikonomopoulos | reload) |
225 | e0be7f21 | Apollon Oikonomopoulos | log_warning_msg "Reloading $NAME daemon: not implemented, as the daemon" |
226 | e0be7f21 | Apollon Oikonomopoulos | log_warning_msg "cannot re-read the config file (use restart)." |
227 | e0be7f21 | Apollon Oikonomopoulos | ;; |
228 | e0be7f21 | Apollon Oikonomopoulos | *) |
229 | e0be7f21 | Apollon Oikonomopoulos | N=/etc/init.d/$NAME |
230 | e0be7f21 | Apollon Oikonomopoulos | echo "Usage: $N {start|stop|force-stop|restart|force-reload|status}" >&2 |
231 | e0be7f21 | Apollon Oikonomopoulos | exit 1 |
232 | e0be7f21 | Apollon Oikonomopoulos | ;; |
233 | e0be7f21 | Apollon Oikonomopoulos | esac |
234 | e0be7f21 | Apollon Oikonomopoulos | |
235 | e0be7f21 | Apollon Oikonomopoulos | exit 0 |