logrotate: Como configurar e sobrescrever padrões?

3

Estou testando uma configuração de logrotate em /tmp . Eu gostaria de

  1. para configurar uma política padrão de logrotate para /tmp/*.log files usando meu arquivo de configuração de teste /tmp/logrotate.conf
  2. para manipular um arquivo de log específico /tmp/special.log com uma política diferente configurada em um arquivo de teste de configuração logrotate separado: /tmp/logrotate.d/included

Mas a resposta do logrotate à minha configuração é:

error: /tmp/logrotate.d/included:1 duplicate log entry for /tmp/special.log

O que devo fazer de diferente?

Aqui está o meu /tmp/logrotate.conf

compress
missingok
notifempty
size 512k
copytruncate
rotate 2
su

# here's my attempt at applying the default policy to all /tmp/*.log
/tmp/*.log {}

# and here I intend to include any overrides
include /tmp/logrotate.d/included

E aqui está o /tmp/logrotate.d/included

/tmp/special.log {
    size 300
}

Aqui está a saída de depuração.

$ sudo logrotate -d ./logrotate.conf

reading config file ./logrotate.conf
including /tmp/logrotate.d/included
reading config file /tmp/logrotate.d/included
error: /tmp/logrotate.d/included:1 duplicate log entry for /tmp/special.log

Handling 2 logs

rotating pattern: /tmp/*.log  524288 bytes (2 rotations)
empty log files are not rotated, old logs are removed
considering log /tmp/normal.log
  log does not need rotating
considering log /tmp/special.log
  log does not need rotating

rotating pattern: /tmp/special.log  300 bytes (2 rotations)
empty log files are not rotated, old logs are removed
No logs found. Rotation not needed.
  1. O erro me surpreende porque pensei de acordo com a página do manual "Arquivos de configuração posteriores podem substituir as opções dadas em arquivos anteriores, então a ordem em que os arquivos de configuração do logrotate são listados é importante."
  2. Por que diz no final ao manipular o padrão /tmp/special.log que nenhum log foi encontrado? O arquivo /tmp/special.log existe e é maior que 300 bytes.
por user1011471 12.05.2015 / 02:09

1 resposta

1

Os desenvolvedores de logrotate proibiram intencionalmente a sobreposição de definições de arquivos de log, portanto, embora regras mais específicas possam seguir regras gerais na configuração, as sobreposições de caminho do arquivo de log ainda geram um erro. Isso é em parte para benefício dos mantenedores de pacotes que incluem regras de logrotate e dos usuários desses pacotes, de modo que as sobreposições se tornem óbvias e possam ser relatadas.

Se os arquivos de log de regra específica e de regra genérica precisarem residirem no mesmo diretório (você pode reconfigurar para movê-los?), será necessário criar e manter uma exclusão explícita do genérico. regra para cada caminho sobreposto. logrotate.conf não fornece isso explicitamente, mas se o seu logrotate for executado em um ambiente com o shell extglob glob-extensions ativado, a exclusão será possível. Você pode verificar se extglob está habilitado executando shopt extglob no mesmo ambiente raiz em que seu logrotate do crontab será executado e pode ser habilitado explicitamente (se necessário) com shopt -s extglob .

Quando extglob é ativado, ele permite construções como:

/tmp/!(special).log {}

... o que impedirá a sobreposição com sua regra posterior mais específica, evitando o erro.

    
por 13.05.2015 / 01:02