/
cmon
156 lines (143 loc) · 2.74 KB
/
cmon
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
#!/bin/bash
# All files in this package is subject to the GPL v2 license
# More information is in the COPYING file in the top directory of this package.
# Copyright (C) 2011 severalnines.com
# chkconfig: 235 99 20
# description: cmon start/stop script
### BEGIN INIT INFO
# Provides: cmon
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: cmon - cluster monitor
### END INIT INFO
SBINDIR=/usr/local/cmon/sbin
RUNNING_DIR=/var/run
PIDFILE=${RUNNING_DIR}/cmon.pid
LOCKFILE=""
if [ -d /var/lock/subsys ]
then
LOCKFILE=/var/lock/subsys/cmon
else
LOCKFILE=/var/lock/cmon
fi
OPTIONS="--config-file=/etc/cmon.cnf"
PROGNAME=cmon
STARTCMON="$SBINDIR/$PROGNAME $OPTIONS"
RETVAL=0
pidof_prog() {
if [ -e "$PIDFILE" ]
then
if pidof $PROGNAME | tr ' ' '\n' | grep $(cat $PIDFILE)
then
return 0
fi
fi
return 1
}
start() {
echo -n "Starting $PROGNAME $OPTIONS :"
PID=`pgrep -f "$STARTCMON"`
if [ -n "$PID" ]
then
printf "$PROGNAME is already running with pid $PID\n"
return 0
else
if [ ! -f $SBINDIR/$PROGNAME ]
then
echo -n "$PROGNAME executable not found in $SBINDIR\n"
fi
$STARTCMON > /dev/null 2>&1 &
echo $! > $PIDFILE
touch $LOCKFILE
sleep 1
PID=`cat $PIDFILE`
if [ "$PID" ]
then
echo " ok"
return 0
else
echo " failed"
return 1
fi
fi
}
stop() {
echo -n "Stopping $PROGNAME : "
PID=`pgrep -f "$STARTCMON"`
if [ -n "$PID" ]
then
kill -15 $PID
return 0
else
`rm -f ${PIDFILE}`
`rm -f ${LOCKFILE}`
echo " failed"
# should really be 1 but chef complains
return 0
fi
i=1
while [ "`pgrep -f "$STARTCMON"`" ]
do
if [ $i -eq 60 ]; then
echo "giving up after 60 secods"
return 0
fi
i=`expr $i + 1`
sleep 1
done
PID=`pgrep -f "$STARTCMON"`
if [ -n "$PID" ]
then
echo " failed"
# should really be 1 but chef complains
return 0
else
`rm -f ${PIDFILE}`
`rm -f ${LOCKFILE}`
echo " ok"
return 0
fi
}
case "$1" in
init|initial)
initial
;;
start)
start
RETVAL=$?
;;
stop)
stop
RETVAL=$?
;;
status)
PID=$(pidof_prog) || true
if [ -n "$PID" ]
then
echo "$PROGNAME is running (pid $PID)."
RETVAL=0
else
echo "$PROGNAME is NOT running."
RETVAL=1
fi
;;
condrestart|try-restart)
PID=$(pidof_prog) || true
if [ -n "$PID" ]
then
stop
start
fi
;;
restart|reload|force-reload)
stop
start
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
exit 1
esac
exit $RETVAL