Como posso configurar a rotação do log para girar os logs a cada hora?

23

De acordo com o Unix e Linux Administration Handbook e man, logrotate tem opções para daily, weeklye monthly, mas há uma maneira de adicionar uma hourlyopção?

Esta postagem do blog menciona que você pode definir size 1e remover a opção de horário (por exemplo daily:) e depois ligar manualmente logrotatecom cron- suponho que algo como

logrotate -f /etc/logrotate.d/my-hourly-file

mas existe uma solução mais elegante para girar logs a cada hora?

cwd
fonte
Certo. Qual é o seu sistema operacional, qual versão?
Nils
Ubuntu 10.04 e 11
cwd

Respostas:

20

Dependendo do seu sistema operacional. Algumas distribuições Linux (todas?) Têm um diretório no /etc/cron.hourlyqual você pode colocar tarefas cron para serem executadas a cada hora.

Outros têm um diretório /etc/cron.d/. Lá você pode colocar cron-jobs que devem ser executados como qualquer usuário especial com as configurações usuais de cron de uma entrada do crontab (e você deve especificar o nome de usuário).

Se você usar um desses em vez do script de rotação padrão do log /etc/cron.daily/, copie esse script cp /dev/nullpara a posição original. Caso contrário, ele será reativado por uma atualização de patch de logrotate.

Para uma rotação horária adequada, verifique também se a dateextdiretiva não está definida. Nesse caso, por padrão, o primeiro arquivo girado obterá a extensão da data atual como AAAAMMDD. Em seguida, na segunda vez em que o logrotate for ativado no mesmo dia, ele simplesmente ignora a rotação, mesmo que o sizelimite tenha excedido.

O motivo é que o novo nome do arquivo a ser rotacionado já existe e o logrotate não anexa o conteúdo ao arquivo antigo existente. Por exemplo, no RHEL e no CentOS, a dateextdiretiva é fornecida por padrão em /etc/logrotate.conf. Depois de remover ou comentar essa linha, os arquivos girados simplesmente obterão um número em execução como extensão até atingir o rotatevalor. Dessa forma, é possível realizar várias rotações por dia.

Nils
fonte
5

Apenas para adicionar à resposta Nils, se alterar a localização do logrotatescript em uma caixa Debian ou Ubuntu, provavelmente é mais seguro usar em dpkg-divertvez de apenas copiar o arquivo e copiar /dev/nullpara a posição original, por exemplo:

dpkg-divert --add --rename --divert /etc/cron.hourly/logrotate /etc/cron.daily/logrotate
boltronics
fonte
Eu não sabia disso e uso o Ubuntu há anos. Obrigado. :)
Vaughany
2

Uma outra opção seria adicionar o comando logrotate na lista crontab. Em seguida, ele será executado a cada hora.

crontab -e

adicione abaixo da linha na lista crontab

0 * * * * /usr/sbin/logrotate /etc/logrotate.d/my-hourly-file
Wasantha Herath
fonte