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