De acordo com o Unix e Linux Administration Handbook e man
, logrotate tem opções para daily
, weekly
e monthly
, mas há uma maneira de adicionar uma hourly
opção?
Esta postagem do blog menciona que você pode definir size 1
e remover a opção de horário (por exemplo daily
:) e depois ligar manualmente logrotate
com 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?
Respostas:
Dependendo do seu sistema operacional. Algumas distribuições Linux (todas?) Têm um diretório no
/etc/cron.hourly
qual 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 scriptcp /dev/null
para 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
dateext
diretiva 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 osize
limite 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
dateext
diretiva é 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 orotate
valor. Dessa forma, é possível realizar várias rotações por dia.fonte
Apenas para adicionar à resposta Nils, se alterar a localização do
logrotate
script em uma caixa Debian ou Ubuntu, provavelmente é mais seguro usar emdpkg-divert
vez de apenas copiar o arquivo e copiar/dev/null
para a posição original, por exemplo:fonte
Uma outra opção seria adicionar o comando logrotate na lista crontab. Em seguida, ele será executado a cada hora.
adicione abaixo da linha na lista crontab
fonte