logrotate só é executado quando você diz para ele rodar. Se você tiver um arquivo de log que pode crescer rapidamente e estiver usando o cron, tenho duas sugestões:
-
agende o cron job com mais frequência (digamos, a cada minuto):
* * * * * /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf
para que você tenha no máximo 60 segundos para o arquivo de log crescer antes de atingir o limite de tamanho.
-
Se o seu arquivo de log ainda estiver crescendo muito rapidamente a cada minuto, execute o logrotate várias vezes em cada minuto; um imediatamente após o outro:
* * * * * /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf; /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf; /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf
(por exemplo) ou:
* * * * * /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf; sleep 10; /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf; sleep 10; /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf
... para dar 10 segundos entre cada chamada para logrotate. Note que você não quer que nenhum cron job demore mais do que 60 segundos, ou você irá se sobrepor ao próximo cron job. Considere envolver a tarefa cron inteira com
timeout
:* * * * * timeout 59 sh -c "/usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf; sleep 10; /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf; sleep 10; /usr/sbin/logrotate /app/syslog-ng/custom/conf/syslog-ng-rotate.conf"
Você teria que experimentar os horários e o número de chamadas para fazer o logrotate do seu ambiente para manter o arquivo de registro sob controle.