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