1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157
|
#!/bin/sh
# This is an example init.d script for stopping/starting/reconfiguring tgtd.
### BEGIN INIT INFO
# Provides: tgtd
# Required-Start: $network
# Required-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Starts and stops the generic storage target daemon
# Description: tgtd provides the SCSI and software transport target state machine daemon.
### END INIT INFO
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
sleep 1
# 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 [ -n "$RUNLEVEL" ] && [ "$RUNLEVEL" -eq 0 -o "$RUNLEVEL" -eq 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
;;
force-reload)
forcedreload
;;
status)
status
;;
*)
echo "Usage: $0 {start|stop|forcedstop|restart|forcedrestart|reload|forcedreload|status}"
exit 2
;;
esac
|