Por que meu logrotate do CentOS roda em horários aleatórios?

9

Eu coloquei um arquivo de configuração logrotate em /etc/logrotate.d/ e esperava que os logs rotacionassem em um tempo consistente; no entanto, eles não ... os tempos de rotação do log são aparentemente aleatórios +/- uma hora.

Por que os tempos de início da rotação do log são aleatórios e como posso alterar isso?

Informativo: meu arquivo de configuração logrotate é assim ...
/opt/backups/network/*.conf {
        copytruncate
        rotate 30
        daily
        create 644 root root
        dateext
        maxage 30
        missingok
        notifempty
        compress
        delaycompress
        postrotate
            ## Create symbolic links in daily/
            PATH='/usr/bin/dirname $1';
            FILE='/bin/basename $1';
            /bin/ln -s $1 $PATH/daily/$FILE
        endscript
}
    
por Mike Pennington 01.12.2012 / 10:36

3 respostas

10

A chave é saber que o CentOS executa os scripts em /etc/cron.{daily,weekly,monthly} de anacron ... /etc/anacrontab está definindo RANDOM_DELAY , que faz o que você poderia esperar (atrasos até RANDOM_DELAY minutos antes de iniciar o trabalho) ...

# /etc/anacrontab: configuration file for anacron

# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22

#period in days   delay in minutes   job-identifier   command
1       5       cron.daily              nice run-parts /etc/cron.daily
7       25      cron.weekly             nice run-parts /etc/cron.weekly
@monthly 45     cron.monthly            nice run-parts /etc/cron.monthly

A definição de RANDOM_DELAY=0 / START_HOURS_RANGE=3 corrigiu o problema ...

EDITAR

Depois de pensar mais, vou remover anacron e instalar a vixie normal cron ...

    
por 01.12.2012 / 10:36
6

Não é a resposta, mas recentemente eu estava tentando descobrir isso por outro motivo e não consegui encontrar nenhuma documentação sobre como o Redhat 6, o Centos, etc executam o cron. Aqui está o que eu fiz engenharia reversa:

  1. crond ainda é executado na inicialização do sistema - ele carrega todos os arquivos em /etc/cron.d
  2. /etc/cron.d/0hourly executa todos os arquivos em /etc/cron.hourly
  3. /etc/cron.hourly/0anacron runs anacron
  4. carrega anacron /etc/anacrontab
  5. /etc/anacrontab é executado (via run-parts ) /etc/cron.daily , /etc/cron.weekly e /etc/cron.monthly

Então, é mais complicado do que nas versões anteriores.

É possível restaurar o comportamento antigo adicionando as entradas por hora, semanal e mensal novamente em /etc/crontab (que agora está vazio), mas anacrontab precisará ser atualizado também. Isso pode ou não interromper futuras atualizações ...

    
por 01.12.2012 / 14:43
4

Outras respostas cobrem como , mas não necessariamente por que . A razão é impedir que trabalhos simultâneos do cron matem sua infraestrutura. (Imagine armazenamento compartilhado, ou talvez 1000 servidores em execução em um host de VM, ou apenas trabalhos noturnos que atingiram algum serviço de rede.)

Sempre resolvo esse problema para a rotação de logs em sistemas específicos, movendo a tarefa de rotação de log específica de cron.daily para uma entrada com um tempo codificado em cron.d . Dessa forma, você ainda obtém as execuções escalonadas de serviços como updatedb, em que a hora realmente não é essencial, mas tempos consistentes para a rotação de logs.

É claro que, quando você atinge um determinado tamanho, você desejará que todos os seus logs sejam enviados do host para um servidor de logs e, em seguida, o tempo de rotação dos arquivos nos nós individuais é menos importante, pois esses são apenas por conveniência (geralmente seguindo a cauda do arquivo) ou como uma alternativa de último recurso. Então, você definitivamente define a rotação no seu servidor de log para ser sistemática.

    
por 01.12.2012 / 20:03