r4: - be more verbose when no new services
[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
60 changed=0
61 if [ ! -d "$MONIT_DIR" ]; then
62     mkdir -p "$MONIT_DIR"
63 else
64     for i in $(find "$MONIT_DIR" -name '*.conf'); do
65         check_service $i
66         if [ ! $RET -eq 0 ]; then
67             serviceconf=$(basename $i)
68             echo "CN: Disabled $serviceconf"
69             mv -f $i $i.disabled
70             changed=1
71         fi
72     done
73 fi
74
75 for i in $(find "$TEMPLATES_DIR" -name '*.conf'); do
76     check_service $i
77     if [ $RET -eq 0 ]; then
78         serviceconf=$(basename $i)
79         if [ ! -r "$MONIT_DIR"/$serviceconf ]; then
80             echo "CN: Enabled $serviceconf"
81             cp -a $i "$MONIT_DIR"
82             changed=1
83         fi
84     fi
85 done
86
87 if [ $changed -eq 1 ]; then
88     echo "CN: Stopping/restarting monit service"
89     pkill -9 -f /usr/sbin/monit || true
90 else
91     echo "CN: No new services detected, sorry"
92 fi
93
94 exit 0