Por que meu log de rotação do CentOS é executado em momentos aleatórios?

10

Coloquei um logrotatearquivo de configuração /etc/logrotate.d/e esperava que os logs girassem 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 mudar isso?


Informativo: meu arquivo de configuração do logrotate fica 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
}
Mike Pennington
fonte

Respostas:

10

A chave é saber que o CentOS executa os scripts em /etc/cron.{daily,weekly,monthly} from anacron... /etc/anacrontabestá definindo RANDOM_DELAY, o que faz o que você pode esperar (atrasa alguns RANDOM_DELAYminutos 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

Configurando RANDOM_DELAY=0/ START_HOURS_RANGE=3corrigido o problema ...

EDITAR

Depois de pensar melhor, vou remover anacrone instalar o vixie normal cron...

Mike Pennington
fonte
Lembre-se de que, se o servidor estiver desligado por algum motivo, quando o anacron deve ser executado, ele será executado algum tempo depois que o sistema for iniciado. Portanto, você ainda pode obter rotações de log em momentos diferentes. Provavelmente não é um problema enorme, mas vale a pena notar.
AngerClown #
Definir START_HOURS_RANGE como valor único (= 3) não funcionará, pois esse var espera o intervalo, não o número único. Portanto, deve ser 3-4 no exemplo acima.
Slavik
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, Centos, etc, executa o cron. Aqui está o que eu fiz engenharia reversa:

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

Portanto, é mais complicado do que nas versões anteriores.

É possível restaurar o comportamento antigo adicionando as entradas horárias, semanais e mensais novamente /etc/crontab(que agora estão vazias), mas anacrontabtambém precisará ser atualizado. Isso pode ou não interromper futuras atualizações ...

AngerClown
fonte
4

Outras respostas abrangem como, mas não necessariamente, o porquê . O motivo é impedir que tarefas agendadas noturnas simultâneas matem sua infraestrutura. (Imagine armazenamento compartilhado, ou talvez 1000 servidores em execução em um host de VM ou apenas trabalhos noturnos que atinjam algum serviço em rede.)

Eu sempre resolvo esse problema para a rotação de logs em específico em meus sistemas, movendo o trabalho específico de rotação de logs de cron.dailypara uma entrada com um tempo embutido cron.d. Dessa forma, você ainda obtém execuções escalonadas para serviços como updatedb, onde o tempo realmente não é essencial, mas sim tempos consistentes para a rotação de logs.

Obviamente, quando você chegar a um determinado tamanho, todos os seus logs serão enviados do host para um servidor de logs de qualquer maneira e, em seguida, o tempo de rotação dos arquivos nos nós individuais será menos importante, pois eles existem apenas para conveniência (geralmente seguindo o final do arquivo) ou como um recurso de último recurso. Definitivamente , você definiria a rotação no servidor de log como sistemática.

mattdm
fonte