Escrevendo um script bash para esvaziar logs do apache

1

Eu tenho dois diretórios (~ / www / e ~ / client-sites /) que contêm vários sites, cada um com arquivos access.log e error.log.

Qual é a maneira mais fácil de encontrar todos esses arquivos e esvaziar seu conteúdo? Eles crescem rapidamente, então eu gostaria de limpar os logs uma vez a cada mês.

    
por Mitch 23.01.2013 / 23:46

3 respostas

9

Instale o logrotate (Windows, consulte link ):

# CentOS/RHEL
yum install logrotate
# Debian/Ubuntu
apt-get install logrotate

Criar / Editar /etc/logrotate.d/httpd , Exemplo é retirado do CentOS, o ajuste é necessário para outras Distros.

/var/log/httpd/*_log {
    weekly
    missingok
    rotate 5
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        /etc/init.d/httpd reload > /dev/null
    endscript
}
    
por 24.01.2013 / 00:46
2

Realmente, faça o que você solicitou

find ~/www/ and ~/client-sites/ \( -name 'access.log' -o -name 'error.log' \) \
    -exec sh -c '> "$1"' -- {} \;

Que truncará cada arquivo que corresponder ao nome do arquivo em qualquer subdiretório com 0 bytes.

    
por 25.01.2013 / 20:01
0

O servidor web apache vem com um utilitário chamado rotatelogs , que pode ser usado para controlar arquivos de log.

Sim, dificilmente qualquer distros o usam.
Não, eles não sabem melhor - são apenas ignorantes.

    
por 29.01.2013 / 11:52

Tags