logrotate - executa o postrotate depois de todo o processamento

1

Eu tenho um script logrotate que é estruturado para girar logs coletados pelo syslog. Parte desse script é recarregar o processo do syslog. O problema é que o recarregamento do syslog é executado para cada arquivo de log correspondente que ele roda e há cerca de 100 deles. Como posso configurar o script logrotate para recarregar o processo syslog apenas uma vez, depois que todos os logs individuais foram processados?

/logs/* {
   daily
   rotate 7
   compress
   postrotate
      /etc/init.d/syslog-ng reload 2>/dev/null
   endscript
}
    
por Cliff Ennis 18.12.2015 / 20:07

2 respostas

2

Use sharedscripts :

Normally logrotate runs the postrotate script every time it rotates a log. This is also true for multiple logs that use the same configuration block. For example, a web server configuration block that refers to both the access log and the error log will, if it rotates both, run the postrotate script twice (once for each file rotated). If both files are rotated, the web server is restarted twice.

To keep logrotate from running that script for every log, you can include the following command:

sharedscripts This command tells logrotate to check all the logs for that configuration block before running the postrotate script. If one or both of the logs is rotated, the postrotate script runs only once. If none of the logs is rotated, the postrotate script doesn’t run.

    
por 11.09.2017 / 11:24
1
/logs/*

^^^ Seu curinga também corresponde aos seus arquivos * .gz e os rotaciona, além dos arquivos com os quais você realmente se importa. Refine sua regra de correspondência para incluir apenas o arquivo que você está interessado e você deve estar pronto.

    
por 18.12.2015 / 20:13