Por que o Apache se recusa a gravar nos arquivos de log (os ErrorLog
/ CustomLog
ones) depois que eu apaguei manualmente o conteúdo deles?
Ele não será gravado nesses arquivos de log novamente até que eu reinicie o Apache.
Por que esse é o caso? Como posso limpar com segurança um arquivo de log sem precisar reiniciar o Apache?
Eu tenho o Apache 2.2.14 no Ubuntu 10.04.
apache-2.2
ubuntu
AtomicFault
fonte
fonte
logrotate
que envia um sinal de recarregar / reiniciar apropriado para o Apache (veja a resposta de Pedro abaixo). Nickgrim coberto o "porquê" por trás de seus logs de parar - Apache ainda está escrevendo para o velho inode (que já não está ligado ao sistema de arquivos em qualquer lugar você pode obter para ele)Respostas:
Acabei de fazer um breve teste:
Observe que
vimtest
possui um número de inode diferente após editá-lo e, portanto, é realmente um arquivo diferente (embora com o mesmo nome do arquivo antigo).Portanto, quando você edita o arquivo com o vim, ele exclui o arquivo antigo e cria um novo com o mesmo nome. O problema que você está vendo é causado pelo Apache ainda gravando no arquivo antigo (excluído) (você pode verificar isso com
lsof
).Se você realmente deseja truncar um arquivo de log, considere
truncate -s 0 /path/to/file.log
(o que parece truncar no local)fonte
Eu recomendaria forçar a rotação dos arquivos de log do Apache2 com:
Se você examinar
/etc/logrotate.d/apache2
, verá que aApache2
configuração precisa ser recarregada depois de excluir seu arquivo de log com:No Ubuntu, você pode, alternativamente, fazer:
fonte