Você pode usar logrotate para isso. O CentOS 7 está usando o systemd para que você possa configurar um scheduled logrotate task com algo parecido com isto:
-
Crie um arquivo de configuração logrotate em
/etc/systemd/system
chamadomylogrotate.config
com o seguinte conteúdo:/path/to/your/logfile/*.log { compress copytruncate delaycompress minsize 1G missingok nomail notifempty rotate 30 }
Isto irá dizer ao logrotate para fazer o seguinte:
- Versões antigas de arquivos de log são compactadas com gzip por padrão.
- Truncar o arquivo de log original no lugar depois de criar uma cópia, em vez de mover o arquivo de log antigo e, opcionalmente, criar um novo.
- Adie a compactação do arquivo de log anterior para o próximo ciclo de rotação, para que você tenha dois arquivos de log descompactados.
- Os arquivos de log são girados quando crescem acima de 1Gbytes.
- Se o arquivo de log estiver faltando, vá para o próximo sem emitir uma mensagem de erro.
- Não envie arquivos de log antigos para qualquer endereço.
- Os arquivos de log são girados 30 vezes antes de serem removidos, portanto você terá 30 arquivos de log antigos. Qualquer coisa mais antiga que isso será deletada.
Crie um serviço systemd. Crie um arquivo em /etc/systemd/system
chamado mylogrotate.service
com o seguinte:
[Unit]
Description=Rotate My Log
[Service]
Type=oneshot
ExecStart=/usr/sbin/logrotate /etc/systemd/system/mylogrotate.config --state /etc/systemd/system/mylogrotate.state --verbose
Vamos agendar essa tarefa. Crie um terceiro arquivo em /etc/systemd/system
chamado mylogrotate.timer
com o seguinte:
[Unit]
Description=Rotate My Log Timer
[Timer]
OnCalendar=*:00:00
Persistent=true
[Install]
WantedBy=timers.target
Isto irá rodar o logrotate a cada hora.
Tudo foi configurado. Agora ative a tarefa agendada.
systemctl enable mylogrotate.timer
systemctl start mylogrotate.timer
Claro, faça tudo isso como root.
(Estou no Ubuntu, mas espero que isso funcione no CentOS sem problemas)