Como o logrotate lida exatamente com "diariamente"?

30

A julgar pelos registros de data e hora em meus sistemas, o logrotate faz sua rotação diária de log quando o logrotate é executado pelo cron. No entanto, se eu executá-lo antes, ele não gira os arquivos. Como o logrotate sabe se deve rotacioná-los ou não, mantém um histórico ou talvez use registros de data e hora?

Kyle Brandt
fonte

Respostas:

32

Acredito que seja o conteúdo do arquivo de estado, que é o meu caso /var/lib/logrotate.status. Cada arquivo possui uma linha, que é a data em que foi girada pela última vez; se você executar o logrotate em uma data em que um determinado arquivo deve ser rotacionado, considerando o número de dias entre a data atual e a data no arquivo (1 para diário, 7 para semanal, etc.), o arquivo será girado.

logrotate parece não se importar a que hora do dia é executado; mesmo que normalmente seja executado às 2355, se você fosse executá-lo às 0130, ainda assim giraria os arquivos marcados diariamente e pela última vez ontem; mas, ao fazê-lo, colocaria a data de hoje no arquivo de estado (em relação a qualquer arquivo rotacionado); portanto, uma segunda execução em 2355 não faria nada.

MadHatter apoia Monica
fonte
11
Hmm .. Por isso, só gira se: data atual> data /var/lib/logrotate/status(como o arquivo está no meu caso).
Kyle Brandt
2
Eu acho que só faz qualquer coisa se tiverem passado 24 horas desde a última execução, o que funciona examinando o mtime do arquivo de estado. Depois que se decide que um dia inteiro passou e pode legalmente fazer qualquer coisa, ele toma decisões DIÁRIAS, SEMANAIS etc. com base nos campos de data no arquivo.
MadHatter apoia Monica
4
Bem, parece usar a data nesse arquivo. Eu definir o dia um de volta dia no arquivo de status e ele correu ... é girado ..
Kyle Brandt
Depois de voltar e cutucar meu logrotate, acho que estava errado e o que você escreveu acima está certo. Ele decide se já foi executado hoje, observando o registro de data e hora do arquivo de estado; caso contrário, ele extrai as datas da última rotação do arquivo de estado e age de acordo. Eu apenas menti para registrar o vi e tocar em -t para convencê-lo de que foi executado às 2355 de ontem, quando girou meus registros de munin. Executando-o novamente, mesmo que tenha passado menos de 24 horas, ele os rodou e atualizou o arquivo de estado de acordo.
MadHatter suporta Monica
Atualizei minha resposta ao meu entendimento atual, considerando o conjunto de testes que acabei de executar (cortando meus toros de munin oito maneiras desde domingo, mas quem se importa!).
MadHatter suporta Monica
11

Na página do manual logrotate:

Normalmente, o logrotate é executado como uma tarefa cron diária. Ele não modificará um log mais de uma vez em um dia, a menos que o critério desse log seja baseado no tamanho do log e na rotação do log esteja sendo executada mais de uma vez por dia ou a menos que a opção -f ou -force seja usada.

sebthebert
fonte
11
para ver quando o cron.daily é executado, clique aqui .
Trevor Boyd Smith