Warum weigert sich Apache, in Protokolldateien (die ErrorLog
/ CustomLog
diejenigen) zu schreiben, nachdem ich deren Inhalt manuell gelöscht habe?
Es wird erst wieder in diese Protokolldateien geschrieben, nachdem ich Apache neu gestartet habe.
Warum ist das so? Wie kann ich eine Protokolldatei sicher löschen, ohne Apache neu starten zu müssen?
Ich habe Apache 2.2.14 unter Ubuntu 10.04.
apache-2.2
ubuntu
AtomicFault
quelle
quelle
logrotate
das ein geeignetes Reload / Restart-Signal an Apache sendet (siehe Pedros Antwort unten). Nickgrim behandelte das "Warum" hinter dem Stoppen Ihrer Protokolle - Apache schreibt immer noch in den alten Inode (der nicht mehr mit dem Dateisystem verbunden ist, wo immer Sie ihn erreichen können)Antworten:
Ich habe gerade einen kurzen Test gemacht:
Beachten Sie, dass
vimtest
diese nach dem Bearbeiten eine andere Inode-Nummer hat und daher tatsächlich eine andere Datei ist (wenn auch mit demselben Namen wie die alte Datei).Wenn Sie die Datei mit vim bearbeiten, wird die alte Datei gelöscht und eine neue mit demselben Namen erstellt. Das Problem, das Sie sehen, wird dadurch verursacht, dass Apache immer noch in die alte (gelöschte) Datei schreibt (Sie können dies überprüfen
lsof
).Wenn Sie eine Protokolldatei wirklich abschneiden möchten, ziehen Sie dies in Betracht
truncate -s 0 /path/to/file.log
(die anscheinend direkt abgeschnitten wird).quelle
Ich würde empfehlen, die Rotation der Apache2- Protokolldateien zu erzwingen mit:
Wenn Sie sich das ansehen
/etc/logrotate.d/apache2
, werden Sie feststellen, dass dieApache2
Konfiguration nach dem Löschen der Protokolldatei neu geladen werden muss mit:Unter Ubuntu können Sie alternativ Folgendes tun:
quelle