blob: 0298c800185b7d1366eb2a517942a3916d4b877a [file] [log] [blame]
#!/bin/sh
#
# Init script for vblade (ATA over Ethernet daemon)
#
# chkconfig: - 30 70
# description: vblade AoE daemon
#
# processname: vblade
# config: /etc/vblade.conf
#
# Shamelessly hacked together from other init scripts (sshd, mostly)
# integrate vblade.init from Fedora's vblade-14-6.fc12.src.rpm
#
RETVAL=0
prog=vblade
spawn_vblade() {
ALLOWMACS=""
[ -n "$5" ] && ALLOWMACS="-m $5"
ID="$1-e$2.$3"
if [ ! -d "/var/run/$prog" ]; then
mkdir /var/run/$prog
fi
PID_FILE=/var/run/$prog/${ID}.pid
$prog $ALLOWMACS $2 $3 $1 $4 >> /var/log/$prog.log 2>&1 &
pid=$!
RETVAL=$?
echo $pid > $PID_FILE
echo -n $"$4 (e$2.$3@$1) [pid $pid]"
[ "$RETVAL" = 0 ] && echo "success" || echo "failure"
echo
}
start() {
local ret
echo $"Starting up $prog: "
#/var/lock/subsys/$prog exists?
status $prog 2>&1 > /dev/null
ret=$?
if [ "$ret" = "2" ]; then
echo "$prog dead but subsys locked"
echo
return 2
else
if [ "$ret" = "0" ]; then
#is running
echo "already running"
return 0
fi
fi
if [ 0 -ne `grep -vc '^#\|^$' /etc/$prog.conf` ]
then
grep -v '^#' /etc/$prog.conf | sed -e 's/ / /g' -e 's/ / /g' | while read line
do
spawn_vblade $line
done
touch /var/lock/subsys/$prog
else
echo -n "empty $prog.conf?"
echo " passed"
echo
fi
}
stop() {
echo -n $"Shutting down $prog: "
for pidfile in `ls /var/run/$prog/*.pid 2>/dev/null`
do
kill -TERM `cat $pidfile`
rm -f $pidfile
done
echo "success"
echo
rm -f /var/lock/subsys/$prog
}
__pids_var_run() {
local base=${1##*/}
local pid_file=${2:-/var/run/$base.pid}
pid=
if [ -f "$pid_file" ] ; then
local line p
while : ; do
read line
[ -z "$line" ] && break
for p in $line ; do
[ -z "${p//[0-9]/}" -a -d "/proc/$p" ] && pid="$pid $p"
done
done < "$pid_file"
if [ -n "$pid" ]; then
return 0
fi
return 1 # "Program is dead and /var/run pid file exists"
fi
return 3 # "Program is not running"
}
__pids_pidof() {
pidof "$1" || pidof "${1##*/}"
}
status() {
local base pid lock_file= pid_file=
# Test syntax.
if [ "$#" = 0 ] ; then
echo $"Usage: status [-p pidfile] {program}"
return 1
fi
if [ "$1" = "-p" ]; then
pid_file=$2
shift 2
fi
if [ "$1" = "-l" ]; then
lock_file=$2
shift 2
fi
base=${1##*/}
# First try "pidof"
__pids_var_run "$1" "$pid_file"
RC=$?
if [ -z "$pid_file" -a -z "$pid" ]; then
pid="$(__pids_pidof "$1")"
fi
if [ -n "$pid" ]; then
echo $"${base} (pid $pid) is running..."
return 0
fi
case "$RC" in
0)
echo $"${base} (pid $pid) is running..."
return 0
;;
1)
echo $"${base} dead but pid file exists"
return 1
;;
esac
if [ -z "${lock_file}" ]; then
lock_file=${base}
fi
# See if /var/lock/subsys/${lock_file} exists
if [ -f /var/lock/subsys/${lock_file} ]; then
echo $"${base} dead but subsys locked"
return 2
fi
echo $"${base} is stopped"
return 3
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
reload)
# yes, this sucks, but the vblade processes die on SIGHUP
stop
start
;;
condrestart)
if [ -f /var/lock/subsys/$prog ]; then
stop
# avoid race
sleep 3
start
fi
;;
status)
status $prog
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart|reload|condrestart|status}"
RETVAL=1
esac
exit $RETVAL