[Pkg-sysvinit-devel] Move init.d/skeleton to use lsb functions for start, stop and reload?

Petter Reinholdtsen pere at hungry.com
Tue Mar 23 07:37:09 UTC 2010


It occured to me, that it might be better to use the start_daemon and
killproc functions from /lib/lsb/init-functions in the skeleton and
bootlogd scripts instead of implementing the same logic in each
script.  What is your view on this?

Here is a draft patch handling start and stop (did not implement
reload).

Index: debian/src/initscripts/etc/init.d/skeleton
===================================================================
--- debian/src/initscripts/etc/init.d/skeleton  (revision 1860)
+++ debian/src/initscripts/etc/init.d/skeleton  (working copy)
@@ -41,51 +41,6 @@
 . /lib/lsb/init-functions

 #
-# Function that starts the daemon/service
-#
-do_start()
-{
-       # Return
-       #   0 if daemon has been started
-       #   1 if daemon was already running
-       #   2 if daemon could not be started
-       start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
-               || return 1
-       start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
-               $DAEMON_ARGS \
-               || return 2
-       # Add code here, if necessary, that waits for the process to be ready
-       # to handle requests from services started subsequently which depend
-       # on this one.  As a last resort, sleep for some time.
-}
-
-#
-# Function that stops the daemon/service
-#
-do_stop()
-{
-       # Return
-       #   0 if daemon has been stopped
-       #   1 if daemon was already stopped
-       #   2 if daemon could not be stopped
-       #   other if a failure occurred
-       start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
-       RETVAL="$?"
-       [ "$RETVAL" = 2 ] && return 2
-       # Wait for children to finish too if this is a daemon that forks
-       # and if the daemon is only ever run from this initscript.
-       # If the above conditions are not satisfied then add some other code
-       # that waits for the process to drop all resources that could be
-       # needed by services started subsequently.  A last resort is to
-       # sleep for some time.
-       start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
-       [ "$?" = 2 ] && return 2
-       # Many daemons don't delete their pidfiles when they exit.
-       rm -f $PIDFILE
-       return "$RETVAL"
-}
-
-#
 # Function that sends a SIGHUP to the daemon/service
 #
 do_reload() {
@@ -101,19 +56,28 @@
 case "$1" in
   start)
        [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
-       do_start
-       case "$?" in
-               0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
-               2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
-       esac
+       start_daemon -p $PIDFILE $DAEMON $DAEMON_ARGS
+       RC=$?
+
+       # Add code here, if necessary, that waits for the process to be ready
+       # to handle requests from services started subsequently which depend
+       # on this one.  As a last resort, sleep for some time.
+
+       [ "$VERBOSE" != no ] && log_end_msg $RC
        ;;
   stop)
        [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
-       do_stop
-       case "$?" in
-               0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
-               2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
-       esac
+       killproc -p $PIDFILE $DAEMON
+       RC=$?
+
+       # Wait for children to finish too if this is a daemon that forks
+       # and if the daemon is only ever run from this initscript.
+       # If the above conditions are not satisfied then add some other code
+       # that waits for the process to drop all resources that could be
+       # needed by services started subsequently.  A last resort is to
+       # sleep for some time.
+
+       [ "$VERBOSE" != no ] && log_end_msg $RC
        ;;
   status)
        status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?

I have not checked that the exit codes from the lsb functions match
the Debian policy.  Anyone know?

Happy hacking,
-- 
Petter Reinholdtsen



More information about the Pkg-sysvinit-devel mailing list