Statistics
| Branch: | Tag: | Revision:

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