Heute konnte ich mein Log File nicht öffnen, bzw. hat es ewig gedauert. Toll plötzlich 132 MB groß!
Das LGTV Device war zwar gelöscht aber das Modul noch aktiv und das hat ca. 70 mal in der Sekunde rumgejammert, dass da kein Fernseher ist. Um das Problem erstmal zu stoppen:
shutdown in der FHEM Befehlszeile eingeben. Oder im Terminal:
sudo invoke-rc.d fhem stop
Und nun? Log File weg schmeißen und neu anfangen? Muss nicht sein, Linux hilft und ist genial wenn man weiß wie. Ich weiß die Linuxer werden jetzt müde lächeln. Also Terminal auf und los: sudo cat /opt/fhem/log/fhem-2015-08.log |grep -v "LGTV" > /opt/fhem/log/fhem-2015-08.txt
Damit wird das Logfile neu geschrieben und alle Zeilen mit LGTV werden ausgelassen (Option -v) (es waren ca 3,3 Mio Zeilen). Das dauert wenige Sekunden, ein Benchmark der besonderen Sorte.Jetzt stimmt der neue Name nicht und die Berechtigung (Ich war als pi angemeldet).
Anschließend FHEM wieder starten.
sudo rm /opt/fhem/log/fhem-2015-08.log
sudo mv /opt/fhem/log/fhem-2015-08.txt /opt/fhem/log/fhem-2015-08.log
sudo chown fhem:dialout /opt/fhem/log/fhem-2015-08.log
sudo invoke-rc.d fhem start
Hinweis
Je nach konkreter Systemumgebung kann es sein, dass die erste Zeile so nicht läuft, da grep die sudo Rechte nicht erbt. Dann hilft die sudo "shell" mit sudo -i
und man kann die ganzen sudo weglassen. Mit exit wird die sudo shell wieder verlassen.Wer es öfters braucht: man kann auch ein kleines Script machen, wo lediglich der Suchbegriff angepasst werden muss. Achtung die eigentliche Version des Scripts schafft Tatsachen. Deshalb erstmal testen und dann die entscheidenden Kommentarzeichen löschen.
Grep sucht nach Regular Expressions - man kann die Suche auch komplexer oder feiner machen. Mein Script sucht einfach nach der Textkette (Auch mit Leerzeichen):
#!/bin/bash
# Script entfernt Zeilen aus dem aktuellen Log File von FHEM
# Suchbegriff für die Zeile die entfernt werden soll
STR="LGTV"
month=$(date +%Y)-$(date +%m)
service fhem stop
cat /opt/fhem/log/fhem-$month.log |grep -v "$STR" > /opt/fhem/log/fhem-$month.txt$
#rm /opt/fhem/log/fhem-$month.log
#mv /opt/fhem/log/fhem-$month.txt /opt/fhem/log/fhem-$month.log
#chown fhem:dialout /opt/fhem/log/fhem-$month.log
service fhem start
Zwei Jahre später habe ich dazu gelernt:
Man kann vieles direkt in der FHEM Kommandozeile machen:
LogFile kurzerhand auf 0 setzen:
{qx(truncate $currlogfile --size 0);;Log 1, "Logfile gelöscht"}Die Ausgabe des korrigierten aktuellen Logfiles direkt im Browser betrachten:
{`sed /<Suchmuster in der Zeile>/d $currlogfile`}Oder mit Umwegen auch wieder zurückschreiben und das LogFile funktioniert weiter:
{qx(sed /<Suchmuster in der Zeile>/d $currlogfile > temp.log ;; cp temp.log $currlogfile;; rm temp.log);;Log 1, "Logfile manipuliert"}
Das Tool sed kann zwar einfach Zeilen aus dem Textfile löschen, aber danach wird das LogFile nicht weiter beschrieben.
sed -i /<Suchmuster in der Zeile>/d <Logfile>
Hier habe ich noch ein paar nützliche sed Script Beispiele gefunden.
Keine Kommentare:
Kommentar veröffentlichen