root/trunk/scripts/stop

Revision 7, 2.2 kB (checked in by whispercastorg, 2 years ago)

version 0.2.0

  • Property svn:executable set to
Line 
1 #!/bin/bash
2
3 pushd `dirname $0` > /dev/null
4
5 L=`basename $0`
6 D='+[%Y-%m-%d %H:%M:%S]'
7
8 COMMAND=$1
9 shift
10
11 SERVICE=${COMMAND%/*}
12 if [ "$SERVICE" = "" ]; then
13   echo "$(date "$D") [$L] : Usage: $L SERVICE[/APPLICATION]"
14   exit 1
15 fi
16 if [ ! -d "../services/$SERVICE" ]; then
17   echo "$(date "$D") [$L] : The service \"$SERVICE\" does not exist"
18   exit 2
19 fi
20
21 CONFIG=`readlink -f "../services/$SERVICE/components.ini"`
22 if [ ! -f "$CONFIG" ]; then
23   echo "$(date "$D") [$L] : The service \"$SERVICE\" is not configured (no \"components.ini\" in \"$(dirname $CONFIG)\")"
24   exit 3
25 fi
26
27 COMPONENT=${COMMAND:$[${#SERVICE}+1]}
28 if [ "$COMPONENT" = "" ]; then
29   IFS_PREVIOUS=$IFS
30   IFS='
31 '
32   COMPONENTS=( $( < "$CONFIG" ) )
33   IFS=$IFS_PREVIOUS
34 else
35   COMPONENTS=(${COMPONENT})
36 fi
37
38 for (( i=0;i<${#COMPONENTS[@]};i++)); do
39   COMPONENT=${COMPONENTS[${i}]}
40
41   BINARY=`readlink -f "../bin/$COMPONENT"`
42   if [ ! -x "$BINARY" ]; then
43     echo "$(date "$D") [$L] : \"$BINARY\" does not exist or is not executable"
44     exit 4
45   fi
46
47   FULL=$SERVICE/$COMPONENT
48   FULL_N=${FULL//\//_}
49
50   STOPFILE="/tmp/whispercast.$FULL_N.stop"
51
52   CMD="$BINARY --undefok=service --service=$SERVICE --logdir=../var/log/$SERVICE --flagfile=../etc/ini/$FULL.ini"
53   START="./start_ $SERVICE $COMPONENT"
54
55   echo "$(date "$D") [$L] : Creating stop file (\"$STOPFILE\")"
56   touch $STOPFILE
57   echo "$(date "$D") [$L] : Killing \"$FULL\"..."
58   pkill -INT -f "$CMD" > /dev/null 2>&1
59   echo "$(date "$D") [$L] : Done"
60   echo -n "$(date "$D") [$L] : Waiting for \"$FULL\"..."
61
62   COUNT=0
63   BUTCHERED=0
64   while [ "$BUTCHERED" -eq 0 ];
65   do
66     while (`pgrep -f "$START" > /dev/null 2>&1` || `pgrep -f "$CMD" > /dev/null 2>&1`) && [ "$COUNT" -lt 30 ];
67     do
68       echo -n ".";
69       sleep 1;
70       COUNT=$(( $COUNT+1 ))
71     done
72     if `pgrep -f "$START\$" > /dev/null 2>&1` || `pgrep -f "$CMD" > /dev/null`; then
73       echo
74       echo "$(date "$D") [$L] : Butchering \"$FULL\" and children.."
75       pkill -KILL -f "$CMD" > /dev/null 2>&1
76       echo "$(date "$D") [$L] : Done";
77       echo -n "$(date "$D") [$L] : Waiting for \"$FULL\"..."
78       COUNT=0
79     else
80       BUTCHERED=1
81     fi
82   done
83
84   echo
85   echo "$(date "$D") [$L] : Done"
86   echo "$(date "$D") [$L] : Removing stop file (\"$STOPFILE\")"
87   rm -f $STOPFILE
88 done
89
90 popd > /dev/null
Note: See TracBrowser for help on using the browser.