r2: - kill monit on postrm and || true
[monit-cn.git] / update-monit.d
1 #!/bin/sh
2
3 MONIT_DIR=/etc/monit.d
4 TEMPLATES_DIR=/usr/share/monit-cn
5
6 check_service() {
7     RET=0
8
9     filename="$1"
10     if [ ! -r "$filename" ]; then
11         RET=1
12         return 1
13     fi
14
15     script='BEGIN { RS = "[ \t\n]+" }
16                { line[NR] = $0 "" }
17          END { for (j in line)
18                 if (line[j] == "pidfile")
19                     print line[j + 1] }'
20     pidfiles=$(awk "$script" < "$filename" | sed -e 's/"//g')
21     check_pidfile $pidfiles
22     return $RET
23 }
24
25 check_pidfile() {
26     RET=0
27
28     while [ -n "$1" ]; do
29         if [ -r "$1" ]; then
30             check_pid $(cat "$1")
31             if [ $RET -eq 1 ]; then
32                 return 1
33             fi
34         else
35             RET=1
36             return 1
37         fi
38         shift
39     done
40
41     return 0
42 }
43
44 check_pid() {
45     RET=0
46
47     while [ -n "$1" ]; do
48         if ! kill -0 "$1" >/dev/null 2>&1; then
49             RET=1
50             return 1
51         fi
52         shift
53     done
54
55     return 0
56 }
57
58
59 if [ ! -d "$MONIT_DIR" ]; then
60     mkdir -p "$MONIT_DIR"
61 else
62     for i in $(find "$MONIT_DIR" -name '*.conf'); do
63         check_service $i
64         if [ ! $RET -eq 0 ]; then
65             serviceconf=$(basename $i)
66             echo "CN: Disabled $serviceconf"
67             mv -f $i $i.disabled
68         fi
69     done
70 fi
71
72 for i in $(find "$TEMPLATES_DIR" -name '*.conf'); do
73     check_service $i
74     if [ $RET -eq 0 ]; then
75         serviceconf=$(basename $i)
76         if [ ! -r "$MONIT_DIR"/$serviceconf ]; then
77             echo "CN: Enabled $serviceconf"
78             cp -a $i "$MONIT_DIR"
79         fi
80     fi
81 done
82
83 echo "CN: Stopping/restarting monit service"
84 pkill -9 -f /usr/sbin/monit || true
85
86 exit 0