Apache si rifiuta di scrivere in un file di registro dopo aver eliminato manualmente tutto il suo contenuto


9

Perché Apache rifiuta di scrivere nei file di registro (gli ErrorLog/ CustomLogquelli) dopo che ho cancellato manualmente il loro contenuto?

Non scriverà più su quei file di registro fino a dopo il riavvio di Apache.

Perché è così? Come posso eliminare in modo sicuro un file di registro senza riavviare Apache?

Ho Apache 2.2.14 su Ubuntu 10.04.


Come si eliminano i contenuti?
Dom

@Dom L'ho appena aperto con vim, faccio "dG" (che cancella tutti i contenuti), e poi salvo con "! Wq". La proprietà / gruppo / permessi non sono cambiati.
AtomicFault il

3
@AtomicFault Probabilmente perché non è così che dovresti ruotare i log di Apache . Dovresti utilizzare qualcosa del genere logrotateche invia un segnale di ricarica / riavvio appropriato ad Apache (vedi la risposta di Pedro di seguito). Nickgrim ha spiegato il "perché" dietro l'arresto dei tuoi registri - Apache sta ancora scrivendo sul vecchio inode (che non è più collegato al filesystem da nessuna parte in cui puoi
trovarlo

Risposte:


14

Ho appena fatto un breve test:

$ echo vim test > vimtest
$ ls -i vimtest
35149 vimtest
$ vim vimtest
<dG, :wq>
$ ls -i vimtest
35148 vimtest

Si noti che vimtestha un numero di inode diverso dopo averlo modificato ed è quindi effettivamente un file diverso (anche se con lo stesso nome del vecchio file).

Quindi, quando modifichi il file con vim, questo elimina il vecchio file e ne crea uno nuovo con lo stesso nome. Il problema che stai riscontrando è causato dal fatto che Apache sta ancora scrivendo nel vecchio file (eliminato) (puoi verificarlo con lsof).

Se vuoi davvero troncare un file di registro, considera truncate -s 0 /path/to/file.log(che sembra troncare sul posto)


2
echo> /path/to/file.log funziona anche

8

Consiglierei di forzare la rotazione dei file di registro di Apache2 con:

$ sudo logrotate -f /etc/logrotate.d/apache2

Se guardi dentro /etc/logrotate.d/apache2, vedrai che la Apache2configurazione deve essere ricaricata dopo aver eliminato il suo file di registro con:

$ sudo /etc/init.d/apache2 reload

Su Ubuntu puoi alternativamente fare:

$ sudo service apache2 reload
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.