Come da titolo, un semplice script di monitoring da usare in Cron per monitorare il funzionamento di:
* Spamassassin
* Clamav
* Qmail
Se qualcosa va storto il servizio viene riavviato e in caso viene inviata una mail all'amministratore di sistema.
Lo script per verificare il funzionamento di Spamassassin utilizza il file Eicar.txt, che potete scaricare da qui:
http://www.eicar.org/download/eicar.com.txt
Qunidi va modificata la riga:
EICAR_TEST="/pathto/eicar.txt"
Buon monitoring!
#! /bin/sh # Author: Paolo Mainardi <paolo@ildn.net> # PATH should only include /usr/* if it runs after the mountnfs.sh script PATH=/usr/sbin:/usr/bin:/sbin:/bin #EMAIL TEXT="Problema riscontrato e risolto sulla sulla macchina:" EMAIL="alertme@domain.com" EMAIL2="alertme2@domain.com" # Active/Deactive Debugging DEBUG=0 NAME="monitoring" DESC="Monitoring of services: Spamd & Clamd" SPAMD="spamd" CLAMD="clamd" SPAMC="spamc" EICAR_TEST="/pathto/eicar.txt" SPAMD_DAEMON=/usr/sbin/$SPAMD SPAMC_DAEMON=/usr/bin/$SPAMC CLAMD_DAEMON=/usr/sbin/$CLAMD DAEMON_ARGS="--options args" SPAMD_PIDFILE=/var/run/$SPAMD.pid CLAMDD_PIDFILE=/var/run/clamav/$CLAMD.pid # CODA MASSIMA QMAIL MAX_QUEUE_QMAIL="200" SCRIPTNAME=/etc/init.d/$NAME # Exit if the package is not installed #[ -x "$SPAMD_DAEMON" ] || exit 0 #[ -x "$CLAMDD_DAEMON" ] || exit 0 # Define LSB log_* functions. # Depend on lsb-base (>= 3.0-6) to ensure that this file is present. . /lib/lsb/init-functions send_mail() { TESTO="Servizio: $1" HOST=`hostname -f` echo $TESTO | mail -s "$TEXT$HOST" $EMAIL $EMAIL2 } check_qmail() { log_daemon_msg "Checkng qmail queue.." QUEUE=`/var/qmail/bin/qmail-qstat | awk '{ print $4 }' | head -n 1` if [ $QUEUE -gt $MAX_QUEUE_QMAIL ]; then ## LANCIA UN AZIONE log_daemon_msg "Qmail queue is over the limits" send_mail "QMAIL" else log_daemon_msg "Qmail queue ok..." fi } check_clamd() { log_daemon_msg "Checking clamd..." PROC_NUMBERS=`ps aux | grep -ic $CLAMD` if [ $PROC_NUMBERS -gt 0 ]; then RET=`/usr/bin/clamdscan $EICAR_TEST` RETVAL=$? # se torna 2 clamd non sta funzionando if [ $RETVAL -eq 2 ] ; then log_daemon_msg "Clamd error: Restarting" RESTART=`/etc/init.d/clamav-daemon restart` if [ $DEBUG -eq 1 ] ; then echo $RESTART; fi send_mail $CLAMD else log_daemon_msg "OK" fi else log_daemon_msg "Clamd error: Restarting" RESTART=`/etc/init.d/clamav-daemon stop; /etc/init.d/clamav-daemon start;` if [ $DEBUG -eq 1 ] ; then echo $RESTART; fi ## LANCIARE SERVIZIO ALERT SMS/EMAIL send_mail $CLAMD fi } check_spamd() { log_daemon_msg "Checking spamd..." # conto il numero dei processi attivi di spamd PROC_NUMBERS=`ps aux | grep -ic $SPAMD` # se abbiamo processi attivi andiamo avanti if [ $PROC_NUMBERS -gt 0 ]; then # Se con il test eicar abbiamo un valore di 0/0 vuol dire che spamassasin non sta funzionando RES=`spamc -c -U /var/run/spamd-socket < $EICAR_TEST` CHECK="0/0"; echo $RES; if [ $RES = $CHECK ]; then log_daemon_msg "Spamd is blocked, restarting now.." RESTART=`/etc/init.d/spamassassin restart` ## LANCIARE SERVIZIO ALERT EMAIL/SMS send_mail $SPAMD else log_daemon_msg "OK" fi else log_daemon_msg "Spamd is not running, restarting now.." RESTART=`/etc/init.d/spamassassin restart` ## LANCIARE SERVIZIO ALERT EMAIL/SMS send_mail $SPAMD fi } # # Function that starts the daemon/service # do_start() { check_spamd check_clamd check_qmail } # # Function that stops the daemon/service # do_stop() { log_daemon_msg "Stop..." } # # Function that sends a SIGHUP to the daemon/service # do_reload() { log_daemon_msg "Reload..." } case "$1" in start) log_daemon_msg "Starting $DESC" "$NAME" do_start case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; stop) [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME" do_stop case "$?" in 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; esac ;; #reload|force-reload) # # If do_reload() is not implemented then leave this commented out # and leave 'force-reload' as an alias for 'restart'. # #log_daemon_msg "Reloading $DESC" "$NAME" #do_reload #log_end_msg $? #;; esac :