Better RC script.
authorFlorian Pose <fp@igh-essen.com>
Wed, 17 May 2006 10:52:14 +0000
changeset 243 f288d557854c
parent 242 1161d9e7a959
child 244 c302a846ab12
Better RC script.
ethercat.sh
--- a/ethercat.sh	Wed May 17 09:28:43 2006 +0000
+++ b/ethercat.sh	Wed May 17 10:52:14 2006 +0000
@@ -25,74 +25,110 @@
 #
 #------------------------------------------------------------------------------
 
-CONFIGFILE=/etc/sysconfig/ethercat
+### BEGIN INIT INFO
+# Provides:          EtherCAT
+# Required-Start:
+# Should-Start:
+# Required-Stop:
+# Should-Stop:
+# Default-Start:     3 5
+# Default-Stop:      0 1 2 6
+# Short-Description: EtherCAT master driver and network device
+# Description:
+### END INIT INFO
 
 #------------------------------------------------------------------------------
 
-print_usage()
-{
-    echo "Usage: $0 { start | stop | restart }"
-}
+ETHERCAT_CONFIG=/etc/sysconfig/ethercat
 
-unload_module()
-{
-    if lsmod | grep ^$1 > /dev/null; then
-	echo "  unloading module \"$1\"..."
-	rmmod $1 || exit 1
-    fi
-}
+test -r $ETHERCAT_CONFIG || { echo "$ETHERCAT_CONFIG not existing";
+	if [ "$1" = "stop" ]; then exit 0;
+	else exit 6; fi; }
+
+. $ETHERCAT_CONFIG
 
 #------------------------------------------------------------------------------
 
-# Get parameters
-if [ $# -eq 0 ]; then
-    print_usage
-    exit 1
-fi
+# 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
 
-ACTION=$1
+# Reset status of this service
+rc_reset
 
-# Load configuration from sysconfig
+# 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.
 
-if [ -f $CONFIGFILE ]; then
-    . $CONFIGFILE
-else
-    echo "ERROR: Configuration file \"$CONFIGFILE\" not found!"
-    exit 1
-fi
+case "$1" in
+    start)
+	echo -n "Starting EtherCAT master... "
 
-case $ACTION in
-    start | restart)
-	echo "Starting EtherCAT master..."
+	# remove incompatible modules
+	for mod in 8139too 8139cp; do
+		if lsmod | grep "^$mod " > /dev/null; then
+			if ! rmmod $mod; then
+				/bin/false
+				rc_status -v
+				rc_exit
+			fi;
+		fi;
+	done
 
-	# remove modules
-	unload_module 8139too
-	unload_module 8139cp
-	unload_module ec_8139too
-	unload_module ec_master
+	modprobe ec_8139too ec_device_index=$DEVICEINDEX
 
-	echo "  loading master modules..."
-	if ! modprobe ec_8139too ec_device_index=$DEVICEINDEX; then
-	    echo "ERROR: Failed to load module!"
-	    exit 1
-	fi
+	rc_status -v
 	;;
 
     stop)
-	echo "Stopping EtherCAT master..."
-	unload_module ec_8139too
-	unload_module ec_master
+	echo -n "Shutting down EtherCAT master... "
+
+	for mod in ec_8139too ec_master; do
+		if lsmod | grep "^$mod " > /dev/null; then
+			if ! rmmod $mod; then
+				/bin/false
+				rc_status -v
+				rc_exit
+			fi;
+		fi;
+	done
+
 	if ! modprobe 8139too; then
 	    echo "Warning: Failed to restore 8139too module."
 	fi
+
+	rc_status -v
 	;;
 
-    *)
-	print_usage
-	exit 1
+    restart)
+	$0 stop
+	$0 start
+
+	rc_status
+	;;
 esac
-
-echo "done."
-exit 0
+rc_exit
 
 #------------------------------------------------------------------------------