Re: [RFC] example init.d script for tgtd

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



FUJITA Tomonori schrieb:
On Fri, 24 Oct 2008 12:52:39 +0200
Tomasz Chmielewski <mangoo@xxxxxxxx> wrote:

FUJITA Tomonori schrieb:

(...)


As I wrote, having scripts/init.d/tgt.example is fine by me as long as
the example is good.

Anyone has comments on this script?

One comment from me is that with the latest git tree, we can remove
'sleep' trick in the start section.
As I see, "sleep" can be removed from restart sections too.

Just to be sure, have you tested this script? I mean, tgtd works
without the sleep hack?

Yes, it seems to work.

I tested it several times on two (not very busy) x86 machines, and it worked.
It didn't work with a version from two days ago.


Signed-off-by: Tomasz Chmielewski <mangoo@xxxxxxxx>

Can you send this as a patch (as usual)?

Sure:

diff --git a/scripts/init.d/tgt b/scripts/init.d/tgt
new file mode 100755
index 0000000..c7fede1
--- /dev/null
+++ b/scripts/init.d/tgt
@@ -0,0 +1,147 @@
+#!/bin/sh
+
+# This is an example init.d script for stopping/starting/reconfiguring tgtd.
+
+TGTD_CONFIG=/etc/tgt/targets.conf
+
+TASK=$1
+
+start()
+{
+	echo "Starting target framework daemon"
+	# Start tgtd first.
+	tgtd &>/dev/null
+	RETVAL=$?
+	if [ "$RETVAL" -ne 0 ] ; then
+	    echo "Could not start tgtd (is tgtd already running?)"
+	    exit 1
+	fi
+	# Put tgtd into "offline" state until all the targets are configured.
+	# We don't want initiators to (re)connect and fail the connection
+	# if it's not ready.
+	tgtadm --op update --mode sys --name State -v offline
+	# Configure the targets.
+	tgt-admin -e -c $TGTD_CONFIG
+	# Put tgtd into "ready" state.
+	tgtadm --op update --mode sys --name State -v ready
+}
+
+stop()
+{
+	if [ "$RUNLEVEL" == 0 -o "$RUNLEVEL" == 6 ] ; then
+	    forcedstop
+	fi
+	echo "Stopping target framework daemon"
+	# Remove all targets. It only removes targets which are not in use.
+	tgt-admin --update ALL -c /dev/null &>/dev/null
+	# tgtd will exit if all targets were removed
+	tgtadm --op delete --mode system &>/dev/null
+	RETVAL=$?
+	if [ "$RETVAL" -eq 107 ] ; then
+	    echo "tgtd is not running"
+	    [ "$TASK" != "restart" ] && exit 1
+	elif [ "$RETVAL" -ne 0 ] ; then
+	    echo "Some initiators are still connected - could not stop tgtd"
+	    exit 2
+	fi
+	echo -n
+}
+
+forcedstop()
+{
+	# NOTE: Forced shutdown of the iscsi target may cause data corruption
+	# for initiators that are connected.
+	echo "Force-stopping target framework daemon"
+	# Offline everything first. May be needed if we're rebooting, but
+	# expect the initiators to reconnect cleanly when we boot again
+	# (i.e. we don't want them to reconnect to a tgtd which is still
+	# working, but the target is gone).
+	tgtadm --op update --mode sys --name State -v offline &>/dev/null
+	RETVAL=$?
+	if [ "$RETVAL" -eq 107 ] ; then
+	    echo "tgtd is not running"
+	    [ "$TASK" != "restart" ] && exit 1
+	else
+	    tgt-admin --offline ALL
+	    # Remove all targets, even if they are still in use.
+	    tgt-admin --update ALL -c /dev/null -f
+	    # It will shut down tgtd only after all targets were removed.
+	    tgtadm --op delete --mode system
+	    RETVAL=$?
+	    if [ "$RETVAL" -ne 0 ] ; then
+		echo "Failed to shutdown tgtd"
+		exit 1
+	    fi
+	fi
+	echo -n
+}
+
+reload()
+{
+	echo "Updating target framework daemon configuration"
+	# Update configuration for targets. Only targets which
+	# are not in use will be updated.
+	tgt-admin --update ALL -c $TGTD_CONFIG &>/dev/null
+	RETVAL=$?
+	if [ "$RETVAL" -eq 107 ] ; then
+	    echo "tgtd is not running"
+	    exit 1
+	fi
+}
+
+forcedreload()
+{
+	echo "Force-updating target framework daemon configuration"
+	# Update configuration for targets, even those in use.
+	tgt-admin --update ALL -f -c $TGTD_CONFIG &>/dev/null
+	RETVAL=$?
+	if [ "$RETVAL" -eq 107 ] ; then
+	    echo "tgtd is not running"
+	    exit 1
+	fi
+}
+
+status()
+{
+	# Don't name this script "tgtd"...
+	TGTD_PROC=$(ps -C tgtd | grep -c tgtd)
+	if [ "$TGTD_PROC" -eq 2 ] ; then
+	    echo "tgtd is running. Run 'tgt-admin -s' to see detailed target info."
+	else
+	    echo "tgtd is NOT running."
+	fi
+}
+
+case $1 in
+	start)
+		start
+  		;;
+	stop)
+		stop
+  		;;
+	forcedstop)
+		forcedstop
+  		;;
+	restart)
+		TASK=restart
+		stop && start
+  		;;
+	forcedrestart)
+		TASK=restart
+		forcedstop && start
+		;;
+	reload)
+		reload
+		;;
+	forcedreload)
+		forcedreload
+		;;
+	status)
+		status
+		;;
+	*)
+		echo "Usage: $0 {start|stop|forcedstop|restart|forcedrestart|reload|forcedreload|status}"
+		exit 2
+		;;
+esac
+



--
Tomasz Chmielewski
http://wpkg.org
--
To unsubscribe from this list: send the line "unsubscribe stgt" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux SCSI]     [Linux RAID]     [Linux Clusters]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]

  Powered by Linux