X-Git-Url: http://ftp.carnet.hr/carnet-debian/scm?a=blobdiff_plain;f=update-monit.d;h=7de29c1afe5efd3aa2e2b7b922facc6905bcab13;hb=e9baeee95b0777684ba19912e7469860ec11dede;hp=05472e9342d5e7add1f195932678e3679e695f0a;hpb=007a5f05615fb2be7823645ec159c980da1a89fc;p=monit-cn.git diff --git a/update-monit.d b/update-monit.d index 05472e9..7de29c1 100755 --- a/update-monit.d +++ b/update-monit.d @@ -7,13 +7,14 @@ # Free Software Foundation; either version 2 of the License, or (at your # option) any later version. -MONIT_DIR=/etc/monit.d +MONIT_DIR=/etc/monit/conf.d TEMPLATES_DIR=/usr/share/monit-cn + check_service() { RET=0 - filename="$1" + if [ ! -r "$filename" ]; then RET=1 return 1 @@ -34,7 +35,7 @@ check_service() { scriptinit='BEGIN { RS = "[ \t\n]+" } { line[NR] = $0 "" } END { for (j in line) - if (((line[j] == "start") || (line[j] == "stop")) && (line[j + 1] == "program")) + if (((line[j] == "start") || (line[j] == "stop")) && (line[j + 1] == "program") && (line[j + 2] == "=")) print line[j + 3] }' initscripts=$(awk "$scriptinit" < "$filename" | sed -e 's/"//g') check_initscript $initscripts @@ -89,6 +90,35 @@ check_pid() { return 0 } +check_template() { + RET=0 + filename="$1" + serviceconf=$(basename $i) + + if [ ! -r "$1" ]; then + RET=1 + return 1 + fi + + if [ ! -r "${TEMPLATES_DIR}/${serviceconf}" ]; then + RET=0 + return 0 + fi + + if ! grep -q "^#.*monit-cn template" "$filename"; then + RET=0 + return 0 + fi + + if ! cmp -s "$filename" "${TEMPLATES_DIR}/${serviceconf}"; then + RET=1 + return 1 + fi + + return $RET +} + + ##################################################################### changed=0 @@ -97,6 +127,16 @@ if [ ! -d "$MONIT_DIR" ]; then fi for i in $(find "$MONIT_DIR" -name '*.conf'); do + check_template $i + if [ ! $RET -eq 0 ]; then + serviceconf=$(basename $i) + echo "CN: Restored default $serviceconf template" + cp -a "${TEMPLATES_DIR}/${serviceconf}" "$MONIT_DIR" + changed=1 + fi +done + +for i in $(find "$MONIT_DIR" -name '*.conf'); do check_service $i if [ ! $RET -eq 0 ]; then serviceconf=$(basename $i) @@ -108,22 +148,22 @@ done for i in $(find "$TEMPLATES_DIR" -name '*.conf'); do serviceconf=$(basename $i) - if [ -r "$MONIT_DIR"/$serviceconf.disabled ]; then - check_service "$MONIT_DIR"/$serviceconf.disabled + if [ -r "${MONIT_DIR}/${serviceconf}.disabled" ]; then + check_service "${MONIT_DIR}/${serviceconf}.disabled" if [ $RET -eq 0 ]; then - if [ ! -r "$MONIT_DIR"/$serviceconf ]; then + if [ ! -r "${MONIT_DIR}/${serviceconf}" ]; then echo "CN: Enabled $serviceconf (previously disabled)" - mv "$MONIT_DIR"/$serviceconf.disabled \ - "$MONIT_DIR"/$serviceconf + mv "${MONIT_DIR}/${serviceconf}.disabled" \ + "${MONIT_DIR}/${serviceconf}" changed=1 fi fi else check_service $i if [ $RET -eq 0 ]; then - if [ ! -r "$MONIT_DIR"/$serviceconf ]; then + if [ ! -r "${MONIT_DIR}/${serviceconf}" ]; then echo "CN: Enabled $serviceconf (new service)" - cp -a $i "$MONIT_DIR" + cp -a $i "${MONIT_DIR}" changed=1 fi fi @@ -132,9 +172,12 @@ done if [ $changed -eq 1 ]; then echo "CN: Stopping/restarting monit service" - pkill -9 -f /usr/sbin/monit || true + #pkill -9 -f /usr/bin/monit || true + service monit restart else echo "CN: No new services detected, sorry" fi exit 0 + +# vi:ft=sh