1*4882a593Smuzhiyun#!/bin/sh 2*4882a593Smuzhiyun 3*4882a593Smuzhiyun### BEGIN INIT INFO 4*4882a593Smuzhiyun# Provides: tgtd 5*4882a593Smuzhiyun# Required-Start: $remote_fs $network $syslog 6*4882a593Smuzhiyun# Required-Stop: $remote_fs $syslog 7*4882a593Smuzhiyun# Default-Start: 3 5 8*4882a593Smuzhiyun# Default-Stop: 0 1 2 6 9*4882a593Smuzhiyun# Short-Description: SCSI target daemon 10*4882a593Smuzhiyun# Description: Linux SCSI target framework (tgt) 11*4882a593Smuzhiyun### END INIT INFO 12*4882a593Smuzhiyun 13*4882a593SmuzhiyunDESC="tgtd" 14*4882a593SmuzhiyunDAEMON="/usr/sbin/tgtd" 15*4882a593SmuzhiyunTGTD_CONFIG=/etc/tgt/targets.conf 16*4882a593Smuzhiyun 17*4882a593Smuzhiyunstart () 18*4882a593Smuzhiyun{ 19*4882a593Smuzhiyun echo -n "Starting $DESC..." 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun # Ensure service isn't running 22*4882a593Smuzhiyun tgt-admin -s >/dev/null 2>&1 23*4882a593Smuzhiyun RETVAL=$? 24*4882a593Smuzhiyun if [ "$RETVAL" -ne 107 ] ; then 25*4882a593Smuzhiyun echo "$DESC is already running." 26*4882a593Smuzhiyun exit 1 27*4882a593Smuzhiyun fi 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun # Start tgtd first 30*4882a593Smuzhiyun $DAEMON &>/dev/null 31*4882a593Smuzhiyun RETVAL=$? 32*4882a593Smuzhiyun if [ "$RETVAL" -ne 0 ]; then 33*4882a593Smuzhiyun echo "failed." 34*4882a593Smuzhiyun exit 1 35*4882a593Smuzhiyun fi 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun # Put tgtd into "offline" state until all the targets are configured. 38*4882a593Smuzhiyun # We don't want initiators to (re)connect and fail the connection 39*4882a593Smuzhiyun # if it's not ready. 40*4882a593Smuzhiyun tgtadm --op update --mode sys --name State -v offline 41*4882a593Smuzhiyun # Configure the targets. 42*4882a593Smuzhiyun tgt-admin -f -e -c $TGTD_CONFIG 43*4882a593Smuzhiyun # Put tgtd into "ready" state. 44*4882a593Smuzhiyun tgtadm --op update --mode sys --name State -v ready 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun echo "done." 47*4882a593Smuzhiyun} 48*4882a593Smuzhiyun 49*4882a593Smuzhiyunstop () 50*4882a593Smuzhiyun{ 51*4882a593Smuzhiyun echo -n "Stopping $DESC..." 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun # Remove all targets. It only removes targets which are not in use. 54*4882a593Smuzhiyun tgt-admin --update ALL -c /dev/null &>/dev/null 55*4882a593Smuzhiyun # tgtd will exit if all targets were removed 56*4882a593Smuzhiyun tgtadm --op delete --mode system &>/dev/null 57*4882a593Smuzhiyun RETVAL=$? 58*4882a593Smuzhiyun if [ "$RETVAL" -eq 107 ] ; then 59*4882a593Smuzhiyun if [ "$TASK" != "restart" ] ; then 60*4882a593Smuzhiyun return 1 61*4882a593Smuzhiyun fi 62*4882a593Smuzhiyun elif [ "$RETVAL" -ne 0 ] ; then 63*4882a593Smuzhiyun echo "Some initiators are still connected - could not stop tgtd" 64*4882a593Smuzhiyun return 2 65*4882a593Smuzhiyun fi 66*4882a593Smuzhiyun echo -n 67*4882a593Smuzhiyun} 68*4882a593Smuzhiyun 69*4882a593Smuzhiyunreload() 70*4882a593Smuzhiyun{ 71*4882a593Smuzhiyun echo "Reloading configuration of $DESC" "$NAME" 72*4882a593Smuzhiyun # Update configuration for targets. Only targets which 73*4882a593Smuzhiyun # are not in use will be updated. 74*4882a593Smuzhiyun tgt-admin --update ALL -c $TGTD_CONFIG &>/dev/null 75*4882a593Smuzhiyun RETVAL=$? 76*4882a593Smuzhiyun if [ "$RETVAL" -eq 107 ] ; then 77*4882a593Smuzhiyun echo "tgtd is not running" 78*4882a593Smuzhiyun exit 1 79*4882a593Smuzhiyun fi 80*4882a593Smuzhiyun} 81*4882a593Smuzhiyun 82*4882a593Smuzhiyunstatus() 83*4882a593Smuzhiyun{ 84*4882a593Smuzhiyun tgt-admin -s >/dev/null 2>&1 85*4882a593Smuzhiyun RETVAL=$? 86*4882a593Smuzhiyun if [ "$RETVAL" -eq 107 ] ; then 87*4882a593Smuzhiyun echo "tgtd is not running" 88*4882a593Smuzhiyun else 89*4882a593Smuzhiyun echo "tgtd is running" 90*4882a593Smuzhiyun fi 91*4882a593Smuzhiyun} 92*4882a593Smuzhiyun 93*4882a593Smuzhiyuncase "$1" in 94*4882a593Smuzhiyun start) 95*4882a593Smuzhiyun start 96*4882a593Smuzhiyun ;; 97*4882a593Smuzhiyun stop) 98*4882a593Smuzhiyun stop 99*4882a593Smuzhiyun ;; 100*4882a593Smuzhiyun restart|force-reload) 101*4882a593Smuzhiyun stop 102*4882a593Smuzhiyun start 103*4882a593Smuzhiyun ;; 104*4882a593Smuzhiyun reload) 105*4882a593Smuzhiyun reload 106*4882a593Smuzhiyun ;; 107*4882a593Smuzhiyun status) 108*4882a593Smuzhiyun status 109*4882a593Smuzhiyun ;; 110*4882a593Smuzhiyun *) 111*4882a593Smuzhiyun echo "Usage: $0 {start|stop|force-reload|restart|status|reload}" 112*4882a593Smuzhiyun exit 1 113*4882a593Smuzhiyun ;; 114*4882a593Smuzhiyunesac 115*4882a593Smuzhiyun 116*4882a593Smuzhiyunexit 0 117