Month: April 2012

  • Posílání chybových hlášek na mail

    Včera jsem zjistil, že mám poškozený filesystém na zálohovacím disku. Oprava byla jednoduchá, stačilo pustit fsck, ale nepříjemné bylo, že jsem se o problému dozvěděl úplně náhodou, až při ručním spustění zálohy před velkou aktualizací systému. Aby se již podobná situace neopakovala, nastavil jsem démona syslog-ng, aby mi posílal chybové hlášky na mail. Když se vyskytne problém, může se ale zalogovat mnoho chyb najednou, a tak mi zanedlouho přišlo cca 300 mailů. Abych podobnému zahlcení do budoucna zabránil, napsal jsem následující skript, který pošle nejvýše jeden mail každých pět minut.

    #!/bin/bash
    #
    # ./bin/syslog-mail.sh
    # Posilat nejvyse jednu hlasku za pet minut
    #
    TO='xy@xy.cz'
    FROM=$TO
    
    last=`cat /var/tmp/syslog-mail-last-sent 2>/dev/null`
    let last=last+300
    now=`date +%s`
    if [ "$last" -lt "$now" ]; then
    	read logline
    	logline=${logline/+([0-9<>])}
    	if [ "$logline" == "" ]; then
    		exit 0
    	fi
    	/usr/sbin/sendmail -t <<EOT
    To: $TO
    From: $FROM
    Subject: Log Alert: $logline
    
    $logline
    `while read logline; do
    	logline=${logline/+([0-9<>])}
    	echo $logline
    done`
    
    --
    This is an automatically generated message from $HOSTNAME
    EOT
    
    	echo "$now" > /var/tmp/syslog-mail-last-sent
    fi

    Do /etc/syslog-ng/syslog-ng.conf jsem přidal tato pravidla:

    destination mail-alert {
    	program("/home/kuba/bin/syslog-mail");
    };
    filter f_error {
    	not facility (mail) and level(err,crit,emerg);
    };
    log {
    	source(src);
    	filter(f_error);
    	destination(mail-alert);
    };