Iskanje in odstranjevanje velikih datotek error_log v Linuxu

Linux Branje: 3 min

Napačno delujoča skripta PHP ali vtičnik lahko v dnevnik vsako minuto zapiše več tisoč opozoril, datoteke error_log, ki nastajajo v mapah spletnega mesta, pa lahko v nekaj dneh zrastejo do gigabajtov. Ta članek pokaže, kako jih najdeš z ukazom find, kako sprostiš prostor, ne da bi pri tem povzročil novo napako, in kaj storiti, da ne zrastejo znova.

Ukaze smo preizkusili na testnem računalniku z AlmaLinux 10.2, na vzorčnem imeniku. Zaganjaj jih v mapi spletnega mesta (na primer ~/public_html); . vedno pomeni trenutni imenik.

Na gostovanju cPanel aWh PHP privzeto beleži v datoteko logs/php.error.log domačega imenika, zato v mapah spletnega mesta error_log nastaja redkeje. Pri starejših nastavitvah, na drugih strežnikih in pri nekaterih aplikacijah pa je pogost.

1. Seznam datotek error_log z velikostmi

find . -type f -name error_log -exec du -sh {} +
  • -type f: išče le datoteke;
  • -name error_log: le tiste z natanko imenom error_log (-iname išče neodvisno od velikih in malih črk);
  • -exec du -sh {} +: velikost najdenih datotek izpiše du. {} + datoteke preda enemu samemu klicu du, kar je pri veliko datotekah hitrejše od {} \; (en klic na datoteko).

Skupna velikost vseh error_log:

find . -type f -name error_log -print0 | du -ch --files0-from=- | tail -1

2. Le velike: stikalo -size

find . -type f -name error_log -size +100M -exec ls -lh {} \;

-size +100M vrne datoteke, večje od 100 MB. Pri gigabajtih pazi na enoto:

  • -size +1G pomeni datoteke, večje od 1 GiB (1 073 741 824 bajtov);
  • -size +1000000000c (c pomeni bajt) tiste, večje od milijarde bajtov, kar je nekoliko manj.

V preizkusu je -size +1000000000c našel error_log z 1010 MB, -size +1G pa ne; datoteko z 1,1 GB sta našla oba. find zaokroža navzgor, zato -size +1G datoteke z 1 GiB še ne najde, le večjo. Za natančnejšo mejo jo navedi v megabajtih: -size +1024M.

3. Sprostitev prostora: praznjenje namesto brisanja

Dnevniške datoteke v uporabi ne briši (rm), temveč jo izprazni:

find . -type f -name error_log -size +100M -exec truncate -s 0 {} +

truncate -s 0 datoteko skrajša na nič bajtov, datoteka sama ostane. Če tekoči program (spletni strežnik, PHP-FPM) dnevnik ravno drži odprt, se prostor izbrisane datoteke ne sprosti, dokler se program znova ne zažene: po df bo disk še vedno poln, datoteke pa ne boš več videl nikjer. Ta pojav in njegovo odpravo predstavlja članek Disk je poln, du pa tega ne pokaže.

Če jo vseeno želiš izbrisati, ker je zagotovo nič ne uporablja (na primer v mapi stare, neobstoječe aplikacije):

find . -type f -name error_log -size +100M -delete

Brisanje je dokončno, koša ni. Pred zagonom si vedno oglej seznam brez -delete.

4. Preden jo izprazniš: poglej, kaj je v njej

Velik error_log je simptom, ne vzrok: ista napaka ga v nekaj dneh znova napolni. Zadnje vrstice pokažejo, katera datoteka in katera vrstica ga povzroča:

tail -n 20 error_log

Povzetek najpogostejših sporočil (brez datuma):

cut -d']' -f2- error_log | sort | uniq -c | sort -rn | head

Če je večina vrstic PHP Deprecated ali PHP Warning, se različica PHP in različica vtičnika ne ujemata: posodobi vtičnik ali predlogo. Če je PHP Fatal error, del spletnega mesta sploh ne deluje. Pri WordPressu o iskanju napak piše članek Način za odpravljanje napak WordPress (WP_DEBUG).

5. Da ne zraste znova

  • Odpravi napako, ki ustvarja vrstice (glej prejšnjo točko).
  • Na produkcijskem spletnem mestu opozoril ne prikazuj in ne beleži množično: v datoteki php.ini ali .user.ini error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE obdrži le pomembne napake (glej: Uporaba datoteke .user.ini za nastavitev parametrov PHP).
  • Na lastnem strežniku sistemske dnevnike vrti in stiska logrotate; to ne velja za datoteke error_log spletnih mest, razen če zanje napišeš posebno pravilo.

O pregledu celotne porabe diska govori članek o ukazih du in df, na gostovanju cPanel pa članek Preverjanje porabe diska v cPanelu.

Nazaj: Linux – članki (76)