Logrotate na VPS: como controlar o tamanho dos logs
Aprenda a usar o logrotate na VPS: como ele roda no Ubuntu 24.04, os arquivos de configuração, as diretivas, a regra de um app, o teste seguro e o journal.
Por Redação Eleven Host · @robson.direitodigital · 31 de outubro de 2026 · 8 min de leitura

Capa da Redação Eleven Host para o guia: Logrotate na VPS: como controlar o tamanho dos logs Arte: Eleven Host
O logrotate é a ferramenta que gira, compacta e apaga logs antigos para que eles não encham o disco. Em vez de um arquivo de log que só cresce, ele guarda um número definido de cópias antigas e descarta as mais velhas.
Este guia mostra como o logrotate roda no Ubuntu 24.04, quais arquivos ele lê, as diretivas mais úteis, como escrever a regra de um app seu, como testar sem estragar nada e o que fazer com o journal do sistema, que tem limites próprios. Quem administra uma VPS (veja o guia de servidor VPS para iniciantes) pode ter logs de aplicações para controlar, e é para isso que a regra serve. Os nomes dos exemplos, como meu-app e usuario, são fictícios. As descrições seguem as páginas de manual do Ubuntu 24.04 (noble), com o logrotate na versão 3.21.0.
Como o logrotate roda no Ubuntu 24.04
No Ubuntu 24.04, quem dispara o logrotate é um timer do systemd, o logrotate.timer. Ele chama o logrotate.service, que executa /usr/sbin/logrotate /etc/logrotate.conf. O timer está configurado como OnCalendar=daily, com AccuracySec=1h e Persistent=true. Como a precisão é de uma hora, o horário exato da execução varia dentro de uma janela, e este guia não cita um horário.
O pacote também instala o script /etc/cron.daily/logrotate, mas ele desiste quando há systemd: o próprio arquivo traz o comentário "skip in favour of systemd timer". Então, nessa versão do Ubuntu, o caminho é o timer, e não o cron. Para ver o timer, use:
systemctl list-timers logrotate.timer
systemctl status logrotate.timer
O guia de systemctl: como iniciar, parar e ver serviços na VPS explica esses comandos com mais calma.
O logrotate é executado uma vez por dia. Quem decide se um log gira naquela execução é a diretiva da regra, como daily, weekly ou size.
Os arquivos do logrotate
Três lugares importam:
/etc/logrotate.conf: o arquivo principal. No Ubuntu ele vem comweekly,su root adm,rotate 4ecreate. As linhas#dateexte#compressvêm comentadas, isto é, desligadas. No fim háinclude /etc/logrotate.d./etc/logrotate.d/: a pasta em que cada programa coloca a sua regra. O comentário do próprio arquivo principal diz "packages drop log rotation information into this directory". A regra do seu app vai aqui./var/lib/logrotate/status: o arquivo de estado, onde o logrotate anota a última rotação. Esse é o caminho padrão, e a opção-s(ou--state) permite usar outro.
A lista de arquivos do pacote logrotate no Ubuntu 24.04 inclui as regras /etc/logrotate.d/btmp e /etc/logrotate.d/wtmp. Outros programas, como o rsyslog, trazem a regra deles para a mesma pasta. A do rsyslog usa weekly, rotate 4, missingok, notifempty, compress, delaycompress e sharedscripts, com um postrotate. Ler uma regra pronta é um bom jeito de aprender o formato.
Quer conhecer a VPS da Eleven Host? VPS a partir de R$ 17,00/mês no Plano Bronze; confira na loja o que cada plano inclui. Conhecer a VPS
As diretivas que importam
A página de manual do logrotate.conf descreve várias diretivas. Estas são as que a regra de um app pode usar, explicadas em uma linha cada:
Quando girar
daily,weekly,monthly: gira uma vez por dia, uma vez por semana, ou na primeira execução do logrotate no mês.size N: gira só se o arquivo passar de N bytes. Aceitak,MeG, como emsize 100M.maxsize N: gira quando o arquivo passa do tamanho, mesmo antes do intervalo de tempo que você também indicou.minsize N: gira quando o arquivo passa do tamanho, mas não antes do intervalo de tempo indicado.
O que guardar e como
rotate N: guarda N cópias antigas antes de remover a mais velha.maxage N: remove os logs girados com mais de N dias.compress: compacta as cópias antigas, com gzip por padrão.delaycompress: adia a compactação para o ciclo seguinte, então a cópia mais recente fica sem compactar.dateext: usa a data no nome em vez de um número. O formato padrão é-%Y%m%d, que dá nomes comoapp.log-20261031.
O que fazer com o arquivo
missingok: se o log não existir, segue para o próximo sem mostrar erro.notifempty: não gira o log se ele estiver vazio.create modo dono grupo: cria o arquivo novo logo depois da rotação e antes dopostrotate, como emcreate 0640 usuario adm. O modo é em octal, e os atributos podem ser omitidos.su usuario grupo: gira os logs com esse usuário e grupo, em vez do usuário e grupo padrão.copytruncate: copia o log e esvazia o original, para programas que não conseguem fechar o próprio arquivo de log.
Scripts e outros arquivos
postrotate...endscript: roda um script depois da rotação, por exemplo para avisar o programa que reabra o log.sharedscripts: roda os scripts uma só vez, mesmo que vários logs combinem com o padrão com curinga.include: lê outro arquivo ou pasta no ponto em que aparece.
Criar a regra do seu app
Suponha um app fictício que grava logs em /var/log/meu-app/, com arquivos terminados em .log. Abra um arquivo novo na pasta de regras. Se precisar de ajuda com o editor, o guia do editor nano para editar arquivos na VPS pelo terminal mostra os atalhos:
sudo nano /etc/logrotate.d/meu-app
E escreva a regra. Este bloco foi montado com as opções documentadas:
/var/log/meu-app/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 0640 usuario adm
sharedscripts
postrotate
systemctl reload meu-app > /dev/null 2>&1 || true
endscript
}
Lendo de cima para baixo: o padrão /var/log/meu-app/*.log escolhe os arquivos. O log gira por dia, guarda 14 cópias antigas, compacta as cópias (menos a mais recente), ignora arquivo ausente ou vazio e cria o novo com modo 0640, dono usuario e grupo adm. No postrotate, o exemplo manda o systemd recarregar o serviço meu-app.
postrotate ou copytruncate
O postrotate com systemctl reload só serve se o seu serviço souber reabrir o arquivo de log quando recebe o reload. Se ele não souber, troque o bloco postrotate pela diretiva copytruncate. Ela tem um risco que a própria documentação aponta: há um intervalo muito pequeno entre copiar o arquivo e esvaziá-lo, então algumas linhas de log podem ser perdidas. Escolha sabendo disso.
Se o logrotate recusar a pasta
Se a pasta do log tiver permissão de escrita para um usuário que não é root, o logrotate pode recusar a rotação. A diretiva su usuario grupo, dentro do bloco, é a que a documentação oferece para essa situação.
Testar sem estragar
Teste a regra antes de confiar nela. As opções da linha de comando, segundo a página de manual do logrotate, são três:
-d(ou--debug): nenhuma alteração é feita nos logs e o arquivo de estado não é atualizado. É o teste seguro.-f(ou--force): força a rotação, mesmo que o logrotate ache que ela não é necessária.-v(ou--verbose): mostra mensagens durante a rotação.
O roteiro é rodar primeiro o -d, ler o que ele diz que faria e só depois forçar uma rotação de verdade:
sudo logrotate -d /etc/logrotate.d/meu-app
sudo logrotate -v -f /etc/logrotate.d/meu-app
cat /var/lib/logrotate/status
O primeiro comando simula. O segundo gira de fato os logs da regra, com mensagens na tela, e o terceiro mostra o arquivo de estado em que o logrotate anota a última rotação. Depois da rotação forçada, olhe a pasta do app e confira se os arquivos antigos aparecem como você esperava.
E o journal do sistema?
O journal do systemd, que você lê com o journalctl, não é controlado pelo logrotate. A lista de arquivos do pacote logrotate no Ubuntu 24.04 traz regras só para btmp e wtmp, sem uma regra do journal. O journald limita o próprio espaço com opções como SystemMaxUse=, SystemKeepFree=, SystemMaxFileSize= e MaxRetentionSec=.
Segundo a página de manual do journald, o SystemMaxFileSize= tem como padrão um oitavo do SystemMaxUse=, até 128M, e o MaxRetentionSec= tem padrão 0, que significa desligado. Esses limites são aplicados pelo próprio journald, que apaga apenas arquivos já arquivados. Mudanças locais vão em arquivos /etc/systemd/journald.conf.d/*.conf.
Para ler o journal, o guia do journalctl para ver os logs do sistema na VPS mostra os comandos.
Comandos para guardar
systemctl list-timers logrotate.timermostra o timer que dispara o logrotate./etc/logrotate.confé o arquivo principal, e as regras dos programas ficam em/etc/logrotate.d/.cat /var/lib/logrotate/statusmostra o arquivo de estado.sudo logrotate -d /etc/logrotate.d/meu-appsimula, sem mudar logs nem estado.sudo logrotate -v -f /etc/logrotate.d/meu-appforça a rotação, com mensagens.postrotatesó serve se o serviço reabrir o log; senão,copytruncate, aceitando a possível perda de algumas linhas.- O journal tem limites próprios no journald, e não no logrotate.
Procura um servidor para os seus serviços? VPS a partir de R$ 17,00/mês no Plano Bronze; confira na loja o que cada plano inclui. Ver planos de VPS
Perguntas frequentes
O que o logrotate faz?
Gira, compacta e apaga logs antigos conforme as regras que você define, para os arquivos não encherem o disco.
Como o logrotate é executado no Ubuntu 24.04?
Pelo logrotate.timer do systemd, uma vez por dia. O script do cron.daily existe, mas sai sem fazer nada quando há systemd.
Onde coloco a regra do meu app?
Em um arquivo dentro de /etc/logrotate.d/, como /etc/logrotate.d/meu-app. O /etc/logrotate.conf inclui essa pasta.
Como testar a regra sem mexer nos logs?
Com sudo logrotate -d e o caminho da regra. A opção -d não altera os logs nem atualiza o arquivo de estado.
O copytruncate é seguro?
Ele resolve o caso de programas que não reabrem o log, mas a documentação avisa que algumas linhas podem ser perdidas entre a cópia e o esvaziamento do arquivo.