Hallo zusammen,
ich habe einige Temperaturfühler unter FHEM laufen, die ich protokolliere und plotte.
Jetzt werden diese Dateien mit der Zeit sehr, sehr groß und belasten das System. Daher würde ich sie gerne verkleinern.
ICH WEIß, dass es die Möglichkeit gibt Daten dadurch zu reduzieren, dass man nicht jeden Wert speichert, sondern nur dann, wenn sich ein Wert ändert. ich habe die Beiträge dazu gelesen und möchte das auch irgendwann -wenn ich Zeit habe- mal ändern.
Aber vorab muss oder möchte ich mir anders behelfen, daher suche ich nach einem Weg, wie ich diese Dateien verkleinern kann.
Meine Idee war, die Datei mit FileZilla oder Putty zu öffnen, die ganzen Daten bis auf zwei Zeilen zu löschen und dann wieder abzuspeichern. So wollte ich mir erst einmal Zeit verschaffen.
Allerdings stoße ich damit an meine Grenzen. Wenn ich die Datei mit FileZilla öffne und editiere, wird sie nicht wieder zurück geschrieben. Das ist wahrscheinloch ein Rechte-Problem. Ich habe dann versucht es mit Putty zu machen. Allerdings ist der Nano-Editor für so was nicht geeignet. Dazu ist die Datei (aktuell 139MB) zu groß.
Daher zwei Fragen: Gibt es eine Möglichkeit das so zu lösen, wie ich es möchte, also die Datei dadurch zu verkleinern, das man Teile daraus löscht? Wie?
Gibt es die Möglichkeit -ähnliche wie bei FHEM.log- das so einzustellen, dass nach X Tagen eine neue Datei erzeugt wird?
Ich möchte noch mal betonen, dass ich weiß, dass das nicht die sauberste Lösung ist, aber für den Übergang würde ich es gerne so versuchen, weil es für mich schneller geht, als alle Messungen umzustellen.
Danke für Tipps.
1) einfach die Datei umbenenne und via gzip dann verkleinern ...
mv <Logfile> <Logfile>.bak
gzip <Logfile>.bak
2) oder wenn Du es unbedingt mit einem Editor machen möchtest ...
vi <LogFile>
<n>dd
:w
:x
<Logfile> ist Dein Dateiname
<n> ist die Anzahl an Zeilen die Du löschen möchtest
gegeben falls musst Du noch einmal FHEM neu starten, damit das Log wieder angelegt wird
Hi,
als Beispiel um bestimmte Zeilen im Log zu löschen.
Als irgendein User am Terminal angemeldet: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)
Wann das Ergebnis gut aussieht:
sudo rm /opt/fhem/log/fhem-2015-08.log # Oder umbenennen
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
Pfade und Namen musst Du natürlich anpassen!
Gruß Otto
ZitatGibt es die Möglichkeit -ähnliche wie bei FHEM.log- das so einzustellen, dass nach X Tagen eine neue Datei erzeugt wird?
Es gibt die Möglichkeit Dateien pro Jahr / Monat / Woche / Tag, usw zu definieren. Einfach in CommandREF schauen
https://fhem.de/commandref_DE.html#FileLog
Zitat<filename> können %-wildcards der POSIX strftime-Funktion des darunterliegenden OS enthalten (siehe auch strftime Beschreibung). Allgemein gebräuchliche Wildcards sind:
%d Tag des Monats (01..31)
%m Monat (01..12)
%Y Jahr (1970...)
%w Wochentag (0..6); beginnend mit Sonntag (0)
%j Tag des Jahres (001..366)
%U Wochennummer des Jahres, wobei Wochenbeginn = Sonntag (00..53)
%W Wochennummer des Jahres, wobei Wochenbeginn = Montag (00..53)
FHEM ersetzt %L mit dem Wert des global logdir Attributes.
Bevor %V für ISO 8601 Wochennummern verwendet werden, muss überprüft werden, ob diese Funktion durch das Brriebssystem unterstützt wird (Es kann sein, dass %V nicht umgesetzt wird, durch einen Leerstring ersetzt wird oder durch eine falsche ISO-Wochennummer dargestellt wird - besonders am Jahresanfang) Bei der Verwendung von %V muss gleichzeitig für das Jahr ein %G anstelle von %Y benutzt werden.
Falls man readonly spezifiziert, dann wird die Datei nur zum visualisieren verwendet, und nicht zum Schreiben geöffnet.
Beispiele:
define lamplog FileLog %L/lamp.log lamp
define wzlog FileLog ./log/wz-%Y-%U.log wz:(measured-temp|actuator).*
Mit ISO 8601 Wochennummern falls unterstützt:
define wzlog FileLog ./log/wz-%G-%V.log wz:(measured-temp|actuator).*
Und es gibt auch noch die Möglichkeit alten Mist automatisch zu entfernen:
https://fhem.de/commandref_DE.html#nrarchive 8)
Wenn es umbedingt manuel erfolgen soll, kann man per konsole auch automatisch löschen lassen.
z.B. jede 8. Zeile löschen:
Zitatsed 'n;n;n;n;n;n;n;d;'
genaue Info über Bedienung von sed siehe Man-Page
man sed
Gerade große Files sollte man per Konsolen-Tools bearbeiten, da dieses dann doch deutlich einfacher geht.
Vielen Dank für die Tipps!
Ich werde das mal abarbeiten.
Und irgendwann ;) mache ich es dann mal vernünftig .
Falls Du doch irgendwann den manuellen Weg gehen möchtest oder musst:
Du könntest auch den Midnight Commander installieren ($sudo apt-get install mc) und dann dessen Editor über Putty benutzen.
Den rufst Du mit "mcedit <Dateiname>" auf.
Ich finde das Teil super handlich.