Ein fehlerhaftes PHP-Skript oder Plugin kann pro Minute mehrere tausend Warnmeldungen in das Protokoll schreiben, und die in den Verzeichnissen der Website entstehenden „error_log“-Dateien können innerhalb weniger Tage eine Größe von mehreren Gigabyte erreichen. Dieser Artikel zeigt Ihnen, wie Sie diese Dateien mit dem Befehl „find“ ausfindig machen, wie Sie Speicherplatz freigeben, ohne dabei weitere Fehler zu verursachen, und was Sie tun müssen, damit sie nicht erneut anwachsen.
Wir haben die Befehle auf einem Testrechner mit AlmaLinux 10.2 in einem Beispielverzeichnis getestet. Führen Sie sie im Verzeichnis der Website (z. B. ~/public_html) aus; das „.“ steht stets für das aktuelle Verzeichnis.
Bei den cPanel-Hosting-Paketen von aWh protokolliert PHP standardmäßig in die Datei „logs/php.error.log“ im Home-Verzeichnis, weshalb in den Website-Ordnern seltener eine „error_log“-Datei erstellt wird. Bei älteren Konfigurationen, auf anderen Servern und bei bestimmten Anwendungen ist dies jedoch häufig der Fall.
1. Liste der error_log-Dateien mit Angabe ihrer Größe
find . -type f -name error_log -exec du -sh {} +
-type f: sucht nur nach Dateien;-name error_log: nur Dateien, die genau den Namen „error_log“ tragen (-inamesucht unabhängig von Groß- und Kleinschreibung);-exec du -sh {} +: Die Größe der gefundenen Dateien wird vonduausgegeben. Das{} +übergibt die Dateien an einen einzigendu-Aufruf, was bei vielen Dateien schneller ist als{} \;(ein Aufruf pro Datei).
Gesamtgröße aller „error_log“-Dateien:
find . -type f -name error_log -print0 | du -ch --files0-from=- | tail -1
2. Nur die Großen: der Schalter „-size“
find . -type f -name error_log -size +100M -exec ls -lh {} \;
Die Angabe „-size +100M“ bezieht sich auf Dateien, die größer als 100 MB sind. Achten Sie bei Gigabyte auf die Maßeinheit:
-size +1Gbezeichnet Dateien, die größer als 1 GiB (1 073 741 824 Byte) sind;-size +1000000000c(wobei „c“ für Byte steht) bezeichnet Dateien, die größer als 1 Milliarde Byte sind, was etwas weniger ist.
Im Test wurde eine 1010 MB große error_log-Datei mit der Option -size +1000000000c gefunden, mit -size +1G jedoch nicht; eine 1,1 GB große Datei wurde von beiden Optionen gefunden. Da find nach oben rundet, findet die Option -size +1G die 1 GiB große Datei noch nicht, sondern erst die größere. Für einen genaueren Grenzwert geben Sie die Größe in Megabyte an: -size +1024M.
3. Speicherplatz freigeben: Leeren statt Löschen
Löschen Sie eine aktuell verwendete Protokolldatei nicht (mit dem Befehl „rm“), sondern leeren Sie sie:
find . -type f -name error_log -size +100M -exec truncate -s 0 {} +
Der Befehl „truncate -s 0“ kürzt die Datei auf null Byte, wobei die Datei selbst erhalten bleibt. Wenn ein laufendes Programm (der Webserver, PHP-FPM) die Protokolldatei gerade geöffnet hat, wird der Speicherplatz der gelöschten Datei erst freigegeben, wenn das Programm neu gestartet wird: Laut „df“ ist die Festplatte weiterhin voll, die Datei ist jedoch nirgendwo mehr zu finden. Dieses Phänomen und dessen Behebung werden im Artikel „Die Festplatte ist voll, aber ‚du‘ zeigt nichts an“ erläutert.
Sollten Sie den Ordner dennoch löschen möchten, weil Sie ihn mit Sicherheit nicht mehr benötigen (beispielsweise im Ordner einer alten, nicht mehr existierenden Anwendung):
find . -type f -name error_log -size +100M -delete
Die Löschung ist endgültig, es gibt keinen Papierkorb. Überprüfen Sie vor der Ausführung stets die Liste ohne den Parameter -delete.
4. Bevor Sie den Inhalt löschen: Überprüfen Sie, was darin enthalten ist
Ein großes „error_log“-Problem ist kein Grund zur Sorge: Der gleiche Fehler füllt die Datei innerhalb weniger Tage erneut auf. Die letzten Zeilen zeigen, welche Datei und welche Zeile den Fehler verursachen:
tail -n 20 error_log
Zusammenfassung der häufigsten Meldungen (ohne Datumsangabe):
cut -d']' -f2- error_log | sort | uniq -c | sort -rn | head
Wenn die meisten Zeilen „PHP Deprecated“ oder „PHP Warning“ lauten, stimmen die PHP-Version und die Version einer PHP-Erweiterung nicht überein: Aktualisieren Sie die PHP-Erweiterung oder das WordPress-Theme. Bei einem „PHP Fatal error“ funktioniert ein Teil der Website nicht. Informationen zur Fehlersuche in WordPress finden Sie im Artikel „WordPress-Fehlerbehebungsmodus (WP_DEBUG)“.
5. Damit es nicht wieder nachwächst
- Beheben Sie den Fehler, der diese Zeilen verursacht (siehe vorherigen Punkt).
- Zeigen Sie auf einer live geschalteten Website keine Warnmeldungen in großer Zahl an und protokollieren Sie diese auch nicht: Legen Sie in der Datei „
php.ini“ oder „.user.ini“ die Einstellung „error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE“ fest, um nur wichtige Fehler anzuzeigen (siehe: Verwendung der Datei „.user.ini“ zur Konfiguration von PHP-Parametern). - Auf dem eigenen Server werden die Systemprotokolle von „
logrotate“ rotiert und komprimiert; dies gilt nicht für die „error_log“-Dateien der Websites, sofern für diese keine gesonderte Regel festgelegt wurde.
Ein Artikel, der die Befehle „du“ und „df“ zur Überprüfung der gesamten Festplattennutzung vorstellt, sowie der Artikel „Festplattennutzung in cPanel-Hosting“ befassen sich mit diesem Thema auf cPanel-Hosting-Konten.