1*4882a593Smuzhiyun#!/bin/sh 2*4882a593Smuzhiyun# 3*4882a593Smuzhiyun# Init script for vblade (ATA over Ethernet daemon) 4*4882a593Smuzhiyun# 5*4882a593Smuzhiyun# chkconfig: - 30 70 6*4882a593Smuzhiyun# description: vblade AoE daemon 7*4882a593Smuzhiyun# 8*4882a593Smuzhiyun# processname: vblade 9*4882a593Smuzhiyun# config: /etc/vblade.conf 10*4882a593Smuzhiyun# 11*4882a593Smuzhiyun# Shamelessly hacked together from other init scripts (sshd, mostly) 12*4882a593Smuzhiyun# integrate vblade.init from Fedora's vblade-14-6.fc12.src.rpm 13*4882a593Smuzhiyun# 14*4882a593Smuzhiyun 15*4882a593SmuzhiyunRETVAL=0 16*4882a593Smuzhiyunprog=vblade 17*4882a593Smuzhiyun 18*4882a593Smuzhiyunspawn_vblade() { 19*4882a593Smuzhiyun ALLOWMACS="" 20*4882a593Smuzhiyun [ -n "$5" ] && ALLOWMACS="-m $5" 21*4882a593Smuzhiyun ID="$1-e$2.$3" 22*4882a593Smuzhiyun if [ ! -d "/var/run/$prog" ]; then 23*4882a593Smuzhiyun mkdir /var/run/$prog 24*4882a593Smuzhiyun fi 25*4882a593Smuzhiyun PID_FILE=/var/run/$prog/${ID}.pid 26*4882a593Smuzhiyun $prog $ALLOWMACS $2 $3 $1 $4 >> /var/log/$prog.log 2>&1 & 27*4882a593Smuzhiyun pid=$! 28*4882a593Smuzhiyun RETVAL=$? 29*4882a593Smuzhiyun echo $pid > $PID_FILE 30*4882a593Smuzhiyun echo -n $"$4 (e$2.$3@$1) [pid $pid]" 31*4882a593Smuzhiyun [ "$RETVAL" = 0 ] && echo "success" || echo "failure" 32*4882a593Smuzhiyun echo 33*4882a593Smuzhiyun} 34*4882a593Smuzhiyun 35*4882a593Smuzhiyunstart() { 36*4882a593Smuzhiyun local ret 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun echo $"Starting up $prog: " 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun #/var/lock/subsys/$prog exists? 41*4882a593Smuzhiyun status $prog 2>&1 > /dev/null 42*4882a593Smuzhiyun ret=$? 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun if [ "$ret" = "2" ]; then 45*4882a593Smuzhiyun echo "$prog dead but subsys locked" 46*4882a593Smuzhiyun echo 47*4882a593Smuzhiyun return 2 48*4882a593Smuzhiyun else 49*4882a593Smuzhiyun if [ "$ret" = "0" ]; then 50*4882a593Smuzhiyun #is running 51*4882a593Smuzhiyun echo "already running" 52*4882a593Smuzhiyun return 0 53*4882a593Smuzhiyun fi 54*4882a593Smuzhiyun fi 55*4882a593Smuzhiyun 56*4882a593Smuzhiyun if [ 0 -ne `grep -vc '^#\|^$' /etc/$prog.conf` ] 57*4882a593Smuzhiyun then 58*4882a593Smuzhiyun grep -v '^#' /etc/$prog.conf | sed -e 's/ / /g' -e 's/ / /g' | while read line 59*4882a593Smuzhiyun do 60*4882a593Smuzhiyun spawn_vblade $line 61*4882a593Smuzhiyun done 62*4882a593Smuzhiyun touch /var/lock/subsys/$prog 63*4882a593Smuzhiyun else 64*4882a593Smuzhiyun echo -n "empty $prog.conf?" 65*4882a593Smuzhiyun echo " passed" 66*4882a593Smuzhiyun echo 67*4882a593Smuzhiyun fi 68*4882a593Smuzhiyun} 69*4882a593Smuzhiyun 70*4882a593Smuzhiyunstop() { 71*4882a593Smuzhiyun echo -n $"Shutting down $prog: " 72*4882a593Smuzhiyun for pidfile in `ls /var/run/$prog/*.pid 2>/dev/null` 73*4882a593Smuzhiyun do 74*4882a593Smuzhiyun kill -TERM `cat $pidfile` 75*4882a593Smuzhiyun rm -f $pidfile 76*4882a593Smuzhiyun done 77*4882a593Smuzhiyun echo "success" 78*4882a593Smuzhiyun echo 79*4882a593Smuzhiyun rm -f /var/lock/subsys/$prog 80*4882a593Smuzhiyun} 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun__pids_var_run() { 83*4882a593Smuzhiyun local base=${1##*/} 84*4882a593Smuzhiyun local pid_file=${2:-/var/run/$base.pid} 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun pid= 87*4882a593Smuzhiyun if [ -f "$pid_file" ] ; then 88*4882a593Smuzhiyun local line p 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun while : ; do 91*4882a593Smuzhiyun read line 92*4882a593Smuzhiyun [ -z "$line" ] && break 93*4882a593Smuzhiyun for p in $line ; do 94*4882a593Smuzhiyun [ -z "${p//[0-9]/}" -a -d "/proc/$p" ] && pid="$pid $p" 95*4882a593Smuzhiyun done 96*4882a593Smuzhiyun done < "$pid_file" 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun if [ -n "$pid" ]; then 99*4882a593Smuzhiyun return 0 100*4882a593Smuzhiyun fi 101*4882a593Smuzhiyun return 1 # "Program is dead and /var/run pid file exists" 102*4882a593Smuzhiyun fi 103*4882a593Smuzhiyun return 3 # "Program is not running" 104*4882a593Smuzhiyun} 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun__pids_pidof() { 107*4882a593Smuzhiyun pidof "$1" || pidof "${1##*/}" 108*4882a593Smuzhiyun} 109*4882a593Smuzhiyun 110*4882a593Smuzhiyunstatus() { 111*4882a593Smuzhiyun local base pid lock_file= pid_file= 112*4882a593Smuzhiyun 113*4882a593Smuzhiyun # Test syntax. 114*4882a593Smuzhiyun if [ "$#" = 0 ] ; then 115*4882a593Smuzhiyun echo $"Usage: status [-p pidfile] {program}" 116*4882a593Smuzhiyun return 1 117*4882a593Smuzhiyun fi 118*4882a593Smuzhiyun if [ "$1" = "-p" ]; then 119*4882a593Smuzhiyun pid_file=$2 120*4882a593Smuzhiyun shift 2 121*4882a593Smuzhiyun fi 122*4882a593Smuzhiyun if [ "$1" = "-l" ]; then 123*4882a593Smuzhiyun lock_file=$2 124*4882a593Smuzhiyun shift 2 125*4882a593Smuzhiyun fi 126*4882a593Smuzhiyun base=${1##*/} 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun # First try "pidof" 129*4882a593Smuzhiyun __pids_var_run "$1" "$pid_file" 130*4882a593Smuzhiyun RC=$? 131*4882a593Smuzhiyun if [ -z "$pid_file" -a -z "$pid" ]; then 132*4882a593Smuzhiyun pid="$(__pids_pidof "$1")" 133*4882a593Smuzhiyun fi 134*4882a593Smuzhiyun if [ -n "$pid" ]; then 135*4882a593Smuzhiyun echo $"${base} (pid $pid) is running..." 136*4882a593Smuzhiyun return 0 137*4882a593Smuzhiyun fi 138*4882a593Smuzhiyun 139*4882a593Smuzhiyun case "$RC" in 140*4882a593Smuzhiyun 0) 141*4882a593Smuzhiyun echo $"${base} (pid $pid) is running..." 142*4882a593Smuzhiyun return 0 143*4882a593Smuzhiyun ;; 144*4882a593Smuzhiyun 1) 145*4882a593Smuzhiyun echo $"${base} dead but pid file exists" 146*4882a593Smuzhiyun return 1 147*4882a593Smuzhiyun ;; 148*4882a593Smuzhiyun esac 149*4882a593Smuzhiyun if [ -z "${lock_file}" ]; then 150*4882a593Smuzhiyun lock_file=${base} 151*4882a593Smuzhiyun fi 152*4882a593Smuzhiyun # See if /var/lock/subsys/${lock_file} exists 153*4882a593Smuzhiyun if [ -f /var/lock/subsys/${lock_file} ]; then 154*4882a593Smuzhiyun echo $"${base} dead but subsys locked" 155*4882a593Smuzhiyun return 2 156*4882a593Smuzhiyun fi 157*4882a593Smuzhiyun echo $"${base} is stopped" 158*4882a593Smuzhiyun return 3 159*4882a593Smuzhiyun} 160*4882a593Smuzhiyun 161*4882a593Smuzhiyuncase "$1" in 162*4882a593Smuzhiyun start) 163*4882a593Smuzhiyun start 164*4882a593Smuzhiyun ;; 165*4882a593Smuzhiyun stop) 166*4882a593Smuzhiyun stop 167*4882a593Smuzhiyun ;; 168*4882a593Smuzhiyun restart) 169*4882a593Smuzhiyun stop 170*4882a593Smuzhiyun start 171*4882a593Smuzhiyun ;; 172*4882a593Smuzhiyun reload) 173*4882a593Smuzhiyun # yes, this sucks, but the vblade processes die on SIGHUP 174*4882a593Smuzhiyun stop 175*4882a593Smuzhiyun start 176*4882a593Smuzhiyun ;; 177*4882a593Smuzhiyun condrestart) 178*4882a593Smuzhiyun if [ -f /var/lock/subsys/$prog ]; then 179*4882a593Smuzhiyun stop 180*4882a593Smuzhiyun # avoid race 181*4882a593Smuzhiyun sleep 3 182*4882a593Smuzhiyun start 183*4882a593Smuzhiyun fi 184*4882a593Smuzhiyun ;; 185*4882a593Smuzhiyun status) 186*4882a593Smuzhiyun status $prog 187*4882a593Smuzhiyun RETVAL=$? 188*4882a593Smuzhiyun ;; 189*4882a593Smuzhiyun *) 190*4882a593Smuzhiyun echo $"Usage: $0 {start|stop|restart|reload|condrestart|status}" 191*4882a593Smuzhiyun RETVAL=1 192*4882a593Smuzhiyunesac 193*4882a593Smuzhiyunexit $RETVAL 194