So setzen Sie Ihre Protokolldateien zurück
Früher oder später möchten Sie Ihre Protokolldateien ( access_log
und error_log
) zurücksetzen, weil sie zu groß oder voller alter Informationen sind, die Sie nicht benötigen.
access_log
wächst normalerweise um 1 MB pro 10.000 Anforderungen.
Der erste Versuch der meisten Leute, die Protokolldatei zu ersetzen, besteht darin, nur die Protokolldatei zu verschieben oder die Protokolldatei zu entfernen. Das funktioniert nicht.
Apache schreibt weiterhin mit demselben Versatz in die Protokolldatei wie vor dem Verschieben der Protokolldatei. Dies führt dazu, dass eine neue Protokolldatei erstellt wird, die genauso groß ist wie die alte, aber jetzt Tausende (oder Millionen) Nullzeichen enthält.
Das richtige Verfahren besteht darin, die Protokolldatei zu verschieben und Apache zu signalisieren, dass die Protokolldateien erneut geöffnet werden sollen.
Apache wird mit dem Signal SIGHUP (-1) signalisiert. z.B
mv access_log access_log.old
töte -1 `cat httpd.pid`
Hinweis: httpd.pid
Ist eine Datei, die die Prozess-ID des Apache httpd-Daemons enthält. Apache speichert diese im selben Verzeichnis wie die Protokolldateien.
Viele Benutzer verwenden diese Methode, um ihre Protokolldateien jede Nacht oder wöchentlich zu ersetzen (und zu sichern).
http://httpd.apache.org/docs/1.3/misc/howto.html#logreset
logrotated
?Die Protokollrotation ist die langfristige Lösung, aber die Antwort auf Ihre unmittelbare Frage besteht darin, die Datei wie folgt abzuschneiden:
Ich gehe davon aus, dass Sie nicht als root angemeldet sind und den Speicherort Ihrer Protokolldatei annehmen, aber Sie sollten in der Lage sein, den Befehl nach Bedarf anzupassen und eine geöffnete Protokolldatei schnell abzuschneiden, ohne Ihre laufenden Apache-Prozesse zu berühren.
quelle
sudo
gilt fürcat
, aber NICHT für die Dateiumleitung. Ich habe es früher getansudo truncate -s0 logfile
.echo > /var/log/httpd/access_log
0
Bytes mit einem Wert ersetzt werden (und wenn die Datei groß ist, kann dies einige Zeit dauern ...). Wenn Sie Glück haben, unterstützt das zugrunde liegende Dateisystem spärliche Dateien und die0
Bytes belegen keinen tatsächlichen Speicherplatz.Null die Protokolldatei ...
quelle
Wenn Sie eine Protokolldatei, auf die Sie keinen Schreibzugriff haben, abschneiden / auf Null setzen möchten, können Sie dies tun
quelle
Versuchen Sie es mit
logrotate
prerotate
und auszuführenpostrotate
copytruncate
ermöglicht es Ihnen, vorhandene Dateien zu kopieren und dann abzuschneiden. Die Kopie kann bei Bedarf zur Sicherung in einen anderen Speicher wie hadoop, s3 verschoben werden/usr/sbin/logrotate --force /etc/logrotate.hourly.conf 2>&1 >> /tmp/logger
durch Verwendung eingestellt werden/etc/cron.hourly/logrotate
Für mehr Information
man logrotate
quelle
Sie können einfach zuerst
$ cat filename >bkp_filename
eine Kopie von "Dateiname" erstellen, als die Originaldatei$ >filename
zu annullieren$ gzip bkp_filename
, da sie auf die Größe Null reduziert wird. Machen Sie jetzt eine Zip-Datei für bkp_Dateiname, damit sie mehr Größe bietet und Ihr Einhängepunkt jetzt grün istquelle
Hatte das gleiche Problem mit einem Prozess und behebt es mit Linux namens Pipe. Folgendes habe ich getan (vorausgesetzt, /tmp/job.log ist die Protokolldatei):
Auf diese Weise konnte ich das Protokoll führen und die Festplattennutzung drastisch reduzieren
Sie können gzip durch jeden Befehl ersetzen, der filtert, dreht, ...
quelle
/tmp/job.log
der Prozess dies offen hält, wird errm /tmp/job.log
nicht nur nichts tun, um den von der Datei verwendeten Speicherplatz tatsächlich freizugeben, sondern der Prozess schreibt auch weiterhin in die jetzt gelöschte Datei. Entferntrm
nur den Dateilink aus dem Verzeichnis. Die Datei selbst wird nicht gelöscht und ihr Speicherplatz freigegeben, bis der Prozess, der sie offen hält, sie tatsächlich schließt.