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