FUJITA Tomonori schrieb: > On Fri, 24 Oct 2008 12:52:39 +0200 > Tomasz Chmielewski <mangoo at wpkg.org> 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 at wpkg.org> > > 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 at vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html |