testbot/scripts: Update the init.d script so it works with the LSB init functions.
Francois Gouget
fgouget at codeweavers.com
Thu Oct 4 07:40:35 CDT 2012
This makes it work on Debian.
---
testbot/scripts/initd | 340 +++++++++++++++++++++++++++++--------------------
1 file changed, 200 insertions(+), 140 deletions(-)
diff --git a/testbot/scripts/initd b/testbot/scripts/initd
index 041e836..c4caf49 100755
--- a/testbot/scripts/initd
+++ b/testbot/scripts/initd
@@ -1,8 +1,9 @@
#!/bin/sh
#
-# System startup script based on template SUSE script for winetestbot
+# System startup script based on template SUSE script for WineTestBot
# Copyright (C) 1995--2005 Kurt Garloff, SUSE / Novell Inc.
# Copyright 2009 Ge van Geldorp.
+# Copyright 2012 Francois Gouget
#
# This library is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
@@ -37,152 +38,211 @@
# Description: Start winetestbot to start job processing
### END INIT INFO
+USER="winehq"
+WTB_ROOT="/home/winehq/tools/testbot"
+DAEMON="$WTB_ROOT/bin/Engine.pl"
+PING="$WTB_ROOT/bin/PingEngine.pl"
+PIDFILE="/var/run/winetestbot.pid"
+
# Check for missing binaries (stale symlinks should not happen)
# Note: Special treatment of stop for LSB conformance
-WINETESTBOT_BIN=/usr/lib/winetestbot/bin/Engine.pl
-test -x $WINETESTBOT_BIN || { echo "$WINETESTBOT_BIN not installed";
+test -x $DAEMON || { echo "$DAEMON not installed";
if [ "$1" = "stop" ]; then exit 0;
else exit 5; fi; }
-# Source LSB init functions
-# providing start_daemon, killproc, pidofproc,
-# log_success_msg, log_failure_msg and log_warning_msg.
-# This is currently not used by UnitedLinux based distributions and
-# not needed for init scripts for UnitedLinux only. If it is used,
-# the functions from rc.status should not be sourced or used.
-#. /lib/lsb/init-functions
-
-# Shell functions sourced from /etc/rc.status:
-# rc_check check and set local and overall rc status
-# rc_status check and set local and overall rc status
-# rc_status -v be verbose in local rc status and clear it afterwards
-# rc_status -v -r ditto and clear both the local and overall rc status
-# rc_status -s display "skipped" and exit with status 3
-# rc_status -u display "unused" and exit with status 3
-# rc_failed set local and overall rc status to failed
-# rc_failed <num> set local and overall rc status to <num>
-# rc_reset clear both the local and overall rc status
-# rc_exit exit appropriate to overall rc status
-# rc_active checks whether a service is activated by symlinks
-. /etc/rc.status
-
-# Reset status of this service
-rc_reset
-
-# Return values acc. to LSB for all commands but status:
-# 0 - success
-# 1 - generic or unspecified error
-# 2 - invalid or excess argument(s)
-# 3 - unimplemented feature (e.g. "reload")
-# 4 - user had insufficient privileges
-# 5 - program is not installed
-# 6 - program is not configured
-# 7 - program is not running
-# 8--199 - reserved (8--99 LSB, 100--149 distrib, 150--199 appl)
-#
-# Note that starting an already running service, stopping
-# or restarting a not-running service as well as the restart
-# with force-reload (in case signaling is not supported) are
-# considered a success.
-
-case "$1" in
+if [ -f /lib/lsb/init-functions ]
+then
+ # Use the LSB compliant functions, on Debian for instance
+ . /lib/lsb/init-functions
+
+ case "$1" in
start)
- echo -n "Starting WineTestBot "
- ## Start daemon with startproc(8). If this fails
- ## the return value is set appropriately by startproc.
- /sbin/startproc -u winetest -g winetest $WINETESTBOT_BIN
-
- # Remember status and be verbose
- rc_status -v
- ;;
+ log_daemon_msg "Starting the WineTestBot server" "Engine.pl"
+ # FIXME: We should be using start_daemon but it cannot handle servers
+ # that don't know how to put themselves in the background and that
+ # need a setuid().
+ # start_daemon -p $PIDFILE $DAEMON
+ /sbin/start-stop-daemon --start --quiet --oknodo \
+ --make-pidfile --pidfile $PIDFILE --user $USER \
+ --chuid $USER --background --startas $DAEMON
+ log_end_msg $?
+ ;;
+
stop)
- echo -n "Shutting down WineTestBot "
- ## Stop daemon with killproc(8) and if this fails
- ## killproc sets the return value according to LSB.
-
- /sbin/killproc -TERM $WINETESTBOT_BIN
-
- # Remember status and be verbose
- rc_status -v
- ;;
- try-restart|condrestart)
- ## Do a restart only if the service was active before.
- ## Note: try-restart is now part of LSB (as of 1.9).
- ## RH has a similar command named condrestart.
- if test "$1" = "condrestart"; then
- echo "${attn} Use try-restart ${done}(LSB)${attn} rather than condrestart ${warn}(RH)${norm}"
- fi
- $0 status
- if test $? = 0; then
- $0 restart
- else
- rc_reset # Not running is not a failure.
- fi
- # Remember status and be quiet
- rc_status
- ;;
- restart)
- ## Stop the service and regardless of whether it was
- ## running or not, start it again.
- $0 stop
- $0 start
-
- # Remember status and be quiet
- rc_status
- ;;
- force-reload)
- ## Signal the daemon to reload its config. Most daemons
- ## do this on signal 1 (SIGHUP).
- ## If it does not support it, restart the service if it
- ## is running.
-
- echo -n "Reload service WineTestBot "
- ## if it supports it:
- /sbin/killproc -HUP $WINETESTBOT_BIN
- #touch /var/run/winetestbot.pid
- rc_status -v
-
- ## Otherwise:
- #$0 try-restart
- #rc_status
- ;;
+ log_daemon_msg "Stopping the WineTestBot server" "Engine.pl"
+ killproc -p $PIDFILE $DAEMON
+ RETVAL=$?
+ [ $RETVAL -eq 0 ] && [ -e "$PIDFILE" ] && rm -f $PIDFILE
+ log_end_msg $RETVAL
+ ;;
+
+ restart|force-reload)
+ $0 stop
+ $0 start
+ ;;
+
+ try-restart)
+ ## Do a restart only if the service was active before.
+ if $0 status
+ then
+ $0 restart
+ fi
+ ;;
+
reload)
- ## Like force-reload, but if daemon does not support
- ## signaling, do nothing (!)
-
- # If it supports signaling:
- echo -n "Reload service FOO "
- /sbin/killproc -HUP $WINETESTBOT_BIN
- #touch /var/run/winetestbot.pid
- rc_status -v
-
- ## Otherwise if it does not support reload:
- #rc_failed 3
- #rc_status -v
- ;;
+ log_daemon_msg "Reloading the WineTestBot configuration"
+ killproc -p $PIDFILE $DAEMON -HUP
+ log_end_msg $?
+ ;;
+
+ status)
+ status="0"
+ pidofproc -p $PIDFILE $DAEMON >/dev/null || status="$?"
+ if [ "$status" = 0 ]
+ then
+ if $PING -q
+ then
+ log_success_msg "The WineTestBot server is running"
+ return 0
+ fi
+ log_failure_msg "The WineTestBot server is running but not responding"
+ return 1
+ elif [ "$status" = 4 ]; then
+ log_failure_msg "could not access PID file for the WineTestBot server"
+ return $status
+ else
+ log_failure_msg "The WineTestBot server is not running"
+ return $status
+ fi
+ ;;
+
+ *)
+ echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload}"
+ exit 1
+ ;;
+ esac
+
+elif [ -f /etc/rc.status ]
+then
+ # This is typically used for SUSE
+
+ # Shell functions sourced from /etc/rc.status:
+ # rc_check check and set local and overall rc status
+ # rc_status check and set local and overall rc status
+ # rc_status -v be verbose in local rc status and clear it afterwards
+ # rc_status -v -r ditto and clear both the local and overall rc status
+ # rc_status -s display "skipped" and exit with status 3
+ # rc_status -u display "unused" and exit with status 3
+ # rc_failed set local and overall rc status to failed
+ # rc_failed <num> set local and overall rc status to <num>
+ # rc_reset clear both the local and overall rc status
+ # rc_exit exit appropriate to overall rc status
+ # rc_active checks whether a service is activated by symlinks
+ . /etc/rc.status
+
+ # Reset status of this service
+ rc_reset
+
+ # Return values acc. to LSB for all commands but status:
+ # 0 - success
+ # 1 - generic or unspecified error
+ # 2 - invalid or excess argument(s)
+ # 3 - unimplemented feature (e.g. "reload")
+ # 4 - user had insufficient privileges
+ # 5 - program is not installed
+ # 6 - program is not configured
+ # 7 - program is not running
+ # 8--199 - reserved (8--99 LSB, 100--149 distrib, 150--199 appl)
+ #
+ # Note that starting an already running service, stopping
+ # or restarting a not-running service as well as the restart
+ # with force-reload (in case signaling is not supported) are
+ # considered a success.
+
+ case "$1" in
+ start)
+ echo -n "Starting WineTestBot "
+ ## Start daemon with startproc(8). If this fails
+ ## the return value is set appropriately by startproc.
+ /sbin/startproc -u winetest -g winetest $DAEMON
+
+ # Remember status and be verbose
+ rc_status -v
+ ;;
+ stop)
+ echo -n "Shutting down WineTestBot "
+ ## Stop daemon with killproc(8) and if this fails
+ ## killproc sets the return value according to LSB.
+
+ /sbin/killproc -TERM $DAEMON
+
+ # Remember status and be verbose
+ rc_status -v
+ ;;
+ try-restart|condrestart)
+ ## Do a restart only if the service was active before.
+ ## Note: try-restart is now part of LSB (as of 1.9).
+ ## RH has a similar command named condrestart.
+ if test "$1" = "condrestart"; then
+ echo "${attn} Use try-restart ${done}(LSB)${attn} rather than condrestart ${warn}(RH)${norm}"
+ fi
+ $0 status
+ if test $? = 0; then
+ $0 restart
+ else
+ rc_reset # Not running is not a failure.
+ fi
+ # Remember status and be quiet
+ rc_status
+ ;;
+ restart|force-reload)
+ ## Stop the service and regardless of whether it was
+ ## running or not, start it again.
+ $0 stop
+ $0 start
+
+ # Remember status and be quiet
+ rc_status
+ ;;
+ reload)
+ log_daemon_msg "Reloading service WineTestBot"
+ killproc -HUP $DAEMON
+ log_end_msg $?
+
+ ## Otherwise if it does not support reload:
+ #rc_failed 3
+ #rc_status -v
+ ;;
status)
- echo -n "Checking for service WineTestBot "
- ## Check status with checkproc(8), if process is running
- ## checkproc will return with exit status 0.
-
- # Return value is slightly different for the status command:
- # 0 - service up and running
- # 1 - service dead, but /var/run/ pid file exists
- # 2 - service dead, but /var/lock/ lock file exists
- # 3 - service not running (unused)
- # 4 - service status unknown :-(
- # 5--199 reserved (5--99 LSB, 100--149 distro, 150--199 appl.)
-
- # NOTE: checkproc returns LSB compliant status values.
- /sbin/checkproc $WINETESTBOT_BIN
- /usr/lib/winetestbot/bin/PingEngine.pl -q
- # NOTE: rc_status knows that we called this init script with
- # "status" option and adapts its messages accordingly.
- rc_status -v
- ;;
+ status_of_proc $DAEMON
+echo -n "Checking for service WineTestBot "
+ ## Check status with checkproc(8), if process is running
+ ## checkproc will return with exit status 0.
+
+ # Return value is slightly different for the status command:
+ # 0 - service up and running
+ # 1 - service dead, but /var/run/ pid file exists
+ # 2 - service dead, but /var/lock/ lock file exists
+ # 3 - service not running (unused)
+ # 4 - service status unknown :-(
+ # 5--199 reserved (5--99 LSB, 100--149 distro, 150--199 appl.)
+
+ # NOTE: checkproc returns LSB compliant status values.
+ /sbin/checkproc $DAEMON
+ $PING -q
+ # NOTE: rc_status knows that we called this init script with
+ # "status" option and adapts its messages accordingly.
+ rc_status -v
+ ;;
*)
- echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload}"
- exit 1
- ;;
-esac
-rc_exit
+ echo "Usage: $0 {start|stop|status|try-restart|restart|force-reload|reload}"
+ exit 1
+ ;;
+ esac
+ rc_exit
+
+
+else
+ echo "WineTestBot does not know how to start on this system"
+ exit 1
+fi
--
1.7.10.4
More information about the wine-patches
mailing list