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