#!/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
|