Probleme mit OPT_LOGROTATE?

Bitte beachten: seit Mai 2014 verwende ich FLI4L nicht mehr. Die folgenden Informationen werden nur zu Archivzwecken aufbewahrt.

Hinweis: Die nachfolgenden Informationen sind veraltet. Ab FLI4L 3.0.0 bietet sich als Alternative z.B. OPT_CPMVRMLOG an, das die hier geschilderten Probleme nicht hat.

Die Ausgaben von syslog als Datei sind sehr hilfreich, um mögliche Fehler aufzuspüren oder generell einen Überblick zu bekommen, was auf dem Router passiert. Allerdings wird diese Datei prinzipbedingt mit der Zeit immer größer, weshalb ein regelmässiges Archivieren sinnvoll ist.

Zu diesem Zweck existiert für FLI4L 2.0.8 ein Paket OPT_LOGROTATE, dass diese Aufgabe übernimmt.

Wenn nun sowohl syslogd als auch klogd und telmond aktiv sind, kommt es zu dem Effekt, dass telmond „abstürzt“, was zur Folge hat, dass auch VBox und Fax-Empfang nicht mehr funktionieren. In der syslog-Ausgabe findet sich dann mitunter eine Meldung in der Art „telmond […]: unexpected EOF“.

Auf der Suche nach einer Lösung habe ich verschiedene Hinweise erhalten und letzlich die Ursache gefunden: Durch OPT_LOGROTATE wird einmal pro Nacht syslogd neu gestartet. Nun ist aber die Ausgabe von syslogd wiederum Grundlage für telmond, wenn syslogd und klogd aktiv sind, weshalb neben syslogd auch telmond neu gestartet werden muss.

Ich habe daher das Script /opt/files/usr/local/bin/logrotate.sh am Ende für FLI4L 2.0.8 wie folgt erweitert:

killall telmond
sleep 5
. /etc/rc.cfg
. /etc/rc.d/telmond start

set +x

Wer OPT_LOGROTATE für FLI4L 2.1.9 angepasst hat, muss hier anders vorgehen:

. /boot/rc.cfg 
killall telmond
sleep 5
. /etc/boot.d/base-helper
. /etc/rc.d/rc400.telmond start

set +x

Dadurch passiert nun folgendes: Zuerst wird telmond zwangsweise beendet. Danach erfolgt eine kurze Pause von 5 Sekunden (ohne die Pause klappte es bei mir nicht), und schliesslich ein Neustart von telmond mit vorherigem Einlesen der Konfiguration.

Die Lösung hat noch einen „Schönheitsfehler“ – das Startscript von telmond erweitert die lokale syslog-Konfiguration auf dem Router bei jedem Start um einen zusätzlich Eintrag, damit Kernel-Meldungen zusätzlich in einer eigenen Datei landen, die von telmond verwendet wird. Dadurch wird die syslog-Konfiguration auf dem Router jeden Tag um eine Zeile erweitert. Das stört zwar den regulären Betrieb zunächst nicht weiter und wird spätestens bei einem Neustart des Routers wieder gelöscht – ist aber auch keine schöne Lösung.

Um diesen Effekt zu beheben, kann man das telmond-Script (/opt/etc/rc.d/telmond bzw. ab FLI4L 2.1.9 /opt/etc/rc.d/rc400.telmond) anpassen. Nachfolgend der relevante Abschnitt alt und neu.

Wichtig: Bei FLI4L 2.1.9 ist statt /etc/rc.d/klogd die Angabe /etc/rc.d/rc330.klogd zu verwenden!

Alte Lösung:

if [ -f /etc/rc.d/klogd ]
then
    echo "*.info    |/var/run/kernel-info" >> /etc/syslog.conf
    fifo_opt='-syslog-fifo /var/run/kernel-info'
    /bin/mknod /var/run/kernel-info p

    if [ -f /var/run/syslogd.pid ]
    then
        kill -1 `cat /var/run/syslogd.pid`
    fi
else
    fifo_opt=''
fi

NEUE Lösung:

if [ -f /etc/rc.d/klogd ]
then
    fifo_opt='-syslog-fifo /var/run/kernel-info'
    if [ -r /var/run/kernel-info ]
    then
        /usr/local/bin/colecho "/var/run/kernel-info readable, skipping syslog-modification" gn
    else
        echo "*.info    |/var/run/kernel-info" >> /etc/syslog.conf
        /bin/mknod /var/run/kernel-info p

        if [ -f /var/run/syslogd.pid ]
        then
            kill -1 `cat /var/run/syslogd.pid`
        fi
    fi
else
    fifo_opt=''
fi

Abschliessend bleibt noch anzumerken, dass dieser Workaround mit neueren FLI4L-Versionen nach 2.1.9 möglicherweise nicht mehr nötig ist, wenn telmond sich durch einen Neustart von syslogd nicht mehr stören lässt.