X-Git-Url: http://ftp.carnet.hr/carnet-debian/scm?a=blobdiff_plain;f=update-monit.d;h=05472e9342d5e7add1f195932678e3679e695f0a;hb=199a1d4482a1e7dd6b6247dfdc08a7c086b4d289;hp=0a1443ffb4af58fd9e2800ad5178fc0529f6da54;hpb=8148e066d8e492ea12ff16573f1b72b8591ef81e;p=monit-cn.git diff --git a/update-monit.d b/update-monit.d index 0a1443f..05472e9 100755 --- a/update-monit.d +++ b/update-monit.d @@ -1,4 +1,11 @@ #!/bin/sh +# +# Copyright (C) 2007 Dinko Korunic, CARNet, Grupa za izradu paketa +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. MONIT_DIR=/etc/monit.d TEMPLATES_DIR=/usr/share/monit-cn @@ -12,13 +19,26 @@ check_service() { return 1 fi - script='BEGIN { RS = "[ \t\n]+" } + scriptpid='BEGIN { RS = "[ \t\n]+" } { line[NR] = $0 "" } END { for (j in line) if (line[j] == "pidfile") print line[j + 1] }' - pidfiles=$(awk "$script" < "$filename" | sed -e 's/"//g') + pidfiles=$(awk "$scriptpid" < "$filename" | sed -e 's/"//g') check_pidfile $pidfiles + + if [ $RET -eq 1 ]; then + return 1 + fi + + scriptinit='BEGIN { RS = "[ \t\n]+" } + { line[NR] = $0 "" } + END { for (j in line) + if (((line[j] == "start") || (line[j] == "stop")) && (line[j + 1] == "program")) + print line[j + 3] }' + initscripts=$(awk "$scriptinit" < "$filename" | sed -e 's/"//g') + check_initscript $initscripts + return $RET } @@ -41,6 +61,20 @@ check_pidfile() { return 0 } +check_initscript() { + RET=0 + + while [ -n "$1" ]; do + if [ ! -x "$1" ]; then + RET=1 + return 1 + fi + shift + done + + return 0 +} + check_pid() { RET=0 @@ -55,32 +89,52 @@ check_pid() { return 0 } +##################################################################### +changed=0 if [ ! -d "$MONIT_DIR" ]; then mkdir -p "$MONIT_DIR" -else - for i in $(find "$MONIT_DIR" -name '*.conf'); do - check_service $i - if [ ! $RET -eq 0 ]; then - serviceconf=$(basename $i) - echo "CN: Disabled $serviceconf" - mv -f $i $i.disabled - fi - done fi -for i in $(find "$TEMPLATES_DIR" -name '*.conf'); do +for i in $(find "$MONIT_DIR" -name '*.conf'); do check_service $i - if [ $RET -eq 0 ]; then + if [ ! $RET -eq 0 ]; then serviceconf=$(basename $i) - if [ ! -r "$MONIT_DIR"/$serviceconf ]; then - echo "CN: Enabled $serviceconf" - cp -a $i "$MONIT_DIR" + echo "CN: Disabled $serviceconf" + mv -f $i $i.disabled + changed=1 + fi +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 [ $RET -eq 0 ]; then + if [ ! -r "$MONIT_DIR"/$serviceconf ]; then + echo "CN: Enabled $serviceconf (previously disabled)" + 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 + echo "CN: Enabled $serviceconf (new service)" + cp -a $i "$MONIT_DIR" + changed=1 + fi fi fi done -echo "CN: Stopping/restarting monit service" -pkill -9 -f /usr/sbin/monit || true +if [ $changed -eq 1 ]; then + echo "CN: Stopping/restarting monit service" + pkill -9 -f /usr/sbin/monit || true +else + echo "CN: No new services detected, sorry" +fi exit 0