Überflüssige Logs löschen
Manchmal sind Logs hilfreich und manchmal nicht, vor allem sehr alte Logs dürften sich eher im “nicht” Bereich bewegen. Aus diesem Grund habe ich mir heute mal ein paar Gedanken gemacht wie ich einfach und schnell aufräumen kann. Bei mir geht es speziell um Fehler- und Zugriffslogs die schon etwas älter und somit nicht mehr relevant sind. Dieser landen auf meinem Server in GZip open_in_new Archiven oder werden mit .processed versehen. Konkret geht es mir um die diversen Logs meiner verschiedenen Seiten auf meinem Server, diese liegen in eigenen Ordnerstrukturen und ein manuelles suchen ist aufwendig und relativ undankbar. Ein kleines Script musste her und dieses findet ihr im unteren Teil der News. Weiterhin möchte ich noch auf Logrotate open_in_new hinweisen, welches ein gängiges und in den meisten Linux Versionen standardmäßig verfügbares Tool ist, um die Log-Verwaltung zu automatisieren. Danke an Tim für den Hinweis.
Zuerst benötigen wir eine Datei mit den abzuarbeitenden Ordnern, diese sind bei mir die diversen Seiten, die alle im selben Ordner liegen und dort dann ihre jeweiligen Strukturen bilden. Um es mir einfach zu machen navigierte ich einfach in den übergeordneten Ordner und nutzte folgenden Befehl.
ls -1 > dirs.txt
Falls auch andere Dateien neben Ordnern enthalten sind kann folgendes genutzt werden. In diesem Falle sollte dann allerdings der Slash in den Zeilen 6 und 7 hinter $dir entfernt werden.
ls -1d */ > dirs.txt
Weiterhin ist nun das kleine Script zu finden. In den ersten beiden Zeilen werden entsprechend die Pfade gesetzt. Zeile 3 startet dann das Auslesen der Datei, Zeile für Zeile. Zeile 4 speichert den aktuell zu verarbeitenden Ordner zwischen und in Zeile 6 und 7 wird die Löschung durchgeführt, der Parameter -f unterdrückt dabei die Ausgabe die erfolgt falls mal keine Dateien zum löschen vorhanden waren. In Zeile 5 erfolgt zwischendurch noch ein Ausschluss von nicht abzuarbeitenden Ordnern. Dies habe ich eingebaut, da mein Export der Ordner relativ lang ist und ich ihn unter Umständen häufig anpasse und verhindern will, dass aus Versehen relevante Logs der internen Server Systeme gelöscht werden. Zum Abschluss wird noch die IF Anweisung und die Schleife geschlossen und das Script ist abgearbeitet.
logPath="my/logs" corePath="/my/web/sites" for i in $(cat dirs.txt); do dir=$(echo $i) if [ $dir != "server-management" -a $dir != "local-db" ]; then rm $corePath/$dir/$logPath/*.processed -f rm $corePath/$dir/$logPath/*.gz -f fi done
Das ganze kann man nun natürlich entsprechend den eigenen Bedürfnissen anpassen und damit diverse kleine Probleme lösen. Ich persönlich nutze mittlerweile viele kleine Scripte die mir das Leben im Bereich Backups, Logs, Sicherheits-Checks usw. erleichtern.