Boas Práticas de Limpeza do /tmp - tmpfiles.d e systemd-tmpfiles

Boas Práticas de Limpeza do /tmp - tmpfiles.d e systemd-tmpfiles

O Que Você Vai Aprender

  • Como /tmp, /var/tmp e /run são gerenciados pelo systemd
  • Como escrever regras tmpfiles.d para limpeza personalizada
  • Como executar systemd-tmpfiles manualmente e de forma agendada

Resumo Rápido

  • A limpeza automática do /tmp e feita pelo systemd-tmpfiles-clean.timer
  • Regras personalizadas vão em /etc/tmpfiles.d/*.conf
  • Formato da regra: tipo caminho modo uid gid idade argumento

Pré-requisitos

  • SO: Ubuntu ou qualquer Linux baseado em systemd
  • Acesso root ou sudo necessário

Por Que o /tmp Precisa de Limpeza?

/tmp é onde as aplicações gravam arquivos temporários. Dependendo da versão, ele é um tmpfs em RAM (limpo na reinicialização) ou um diretório em disco. Servidores de longa duração, porém, acumulam arquivos temporários entre reinicializações, o que pode esgotar o espaço em disco e causar referências obsoletas de arquivos PID ou socket.

  • Usos típicos: arquivos intermediários de compressão, dados de sessão, arquivos socket
  • O que está por trás do /tmp depende da versão: um tmpfs em RAM ou um diretório no sistema de arquivos raiz (disco) - veja a tabela abaixo
  • /var/tmp: persiste entre reinicializações por design - requer gerenciamento explícito

Verifique o que está por trás do /tmp no seu sistema

$ findmnt /tmp
TARGET SOURCE FSTYPE OPTIONS
/tmp   tmpfs  tmpfs  rw,nosuid,nodev,size=4011076k,nr_inodes=1048576,inode64

Se FSTYPE for tmpfs, o /tmp fica em RAM. Se o comando não exibir nada (código de saída 1), o /tmp não é uma montagem separada - é um diretório comum no sistema de arquivos raiz. O df -h /tmp também mostra em qual sistema de arquivos o /tmp está e quanto espaço está livre.

$ df -h /tmp
Filesystem      Size  Used Avail Use% Mounted on
tmpfs           3.9G   12K  3.9G   1% /tmp

Se Mounted on mostrar /, o /tmp está no sistema de arquivos raiz (disco).

Padrão do Ubuntu por versão

Versão /tmp padrão
Ubuntu 22.04 LTS / 24.04 LTS Em disco (normalmente um diretório no sistema de arquivos raiz); esvaziado na inicialização
Ubuntu 24.10 ou posterior (incluindo 26.04 LTS) tmpfs (em RAM; o conteúdo é perdido na reinicialização)

A partir do Ubuntu 24.10, o tmp.mount padrão do systemd passou a vir habilitado, o que torna o /tmp um tmpfs. As notas de versão do 26.04 LTS listam essa mudança entre as alterações desde o 24.04 LTS. (Fonte: Ubuntu 24.10 release notes, Ubuntu 26.04 LTS summary for LTS users, consultado em 2026-09-25)

Um /tmp em disco, como no 22.04 LTS e no 24.04 LTS, também não mantém o conteúdo entre reinicializações. O /usr/lib/tmpfiles.d/tmp.conf do Ubuntu declara o /tmp com o tipo D (D /tmp 1777 root root - no 22.04, D /tmp 1777 root root 30d no 24.04), e na inicialização o systemd-tmpfiles-setup.service é executado com --remove --boot, o que esvazia o /tmp. Coloque em /var/tmp os arquivos que precisam sobreviver a uma reinicialização. (Fonte: patch do tmp.conf no pacote systemd do Ubuntu para o 22.04 / 24.04, systemd-tmpfiles-setup.service (24.04), consultado em 2026-09-25)

Um /tmp em tmpfs é limpo na reinicialização, mas em servidores de longa duração os arquivos se acumulam entre as reinicializações e consomem RAM. Um /tmp em disco ocupa o disco da mesma forma. Em ambos os casos, a limpeza periódica com systemd-tmpfiles (explicada a seguir) é o que mantém o diretório sob controle.

O Que É o systemd-tmpfiles?

systemd-tmpfiles é a ferramenta declarativa para gerenciar diretórios temporários - criando-os no boot, definindo permissões e excluindo arquivos obsoletos de forma agendada.

Três modos de operação:

Modo Flag Ação
Create --create Criar arquivos/dirs conforme regras
Clean --clean Excluir entradas mais antigas que o limite de idade
Remove --remove Excluir tudo que corresponde as regras
$ sudo systemd-tmpfiles --create
$ sudo systemd-tmpfiles --clean
$ sudo systemd-tmpfiles --remove

Duas unidades systemd executam isso automaticamente:

  • systemd-tmpfiles-setup.service - executa --create no boot
  • systemd-tmpfiles-clean.timer - executa --clean periodicamente (padrão: 15 min após o boot, depois diariamente)

Como Escrever Regras tmpfiles.d

Coloque arquivos de configuração em /etc/tmpfiles.d/. Os padrões do sistema ficam em /usr/lib/tmpfiles.d/ - nunca edite esses diretamente, pois atualizações de pacotes os sobrescrevem.

Formato

tipo caminho modo uid gid idade argumento
Campo Descrição Exemplo
tipo Tipo de operação d, f, x, e
caminho Caminho alvo /tmp/myapp
modo Permissões (octal) 0755
uid/gid Proprietário (- = manter atual) root / -
idade Limite de exclusão para --clean 7d, 1h, - (nunca)
argumento Conteúdo inicial para arquivos -

Tipos Comuns

Tipo Significado
d Criar diretório se ausente; --clean remove arquivos antigos dentro
D Como d, mas --remove também exclui o conteúdo do diretório
f Criar arquivo se ausente
f+ Criar ou truncar arquivo
x Excluir de --clean e --remove
e Definir permissões em uma entrada existente
z Definir permissões e rótulos SELinux

Como Executar a Limpeza Periódica

Verifique o timer de limpeza:

$ systemctl status systemd-tmpfiles-clean.timer
● systemd-tmpfiles-clean.timer - Daily Cleanup of Temporary Directories
     Loaded: loaded (/lib/systemd/system/systemd-tmpfiles-clean.timer; static)
     Active: active (waiting) since Mon 2024-01-01 00:00:00 UTC; 3h ago
    Trigger: Tue 2024-01-02 00:15:30 UTC; 20h left

Acionar uma limpeza imediata:

$ sudo systemctl start systemd-tmpfiles-clean

--clean só age em entradas onde o campo de idade está definido. Uma entrada com idade - nunca é excluída automaticamente.

Exemplos Práticos

Exemplo 1: Diretório temporário por aplicação com limpeza automática

# /etc/tmpfiles.d/myapp.conf
d /tmp/myapp 0750 myapp myapp 1d

Cria /tmp/myapp de propriedade de myapp:myapp com modo 0750, e exclui arquivos internos mais antigos que 1 dia.

Exemplo 2: Limpar logs da aplicação em /var/tmp após 7 dias

# /etc/tmpfiles.d/clean-var-tmp.conf
d /var/tmp/app-logs 0755 root root 7d

Exemplo 3: Criar diretório /run no boot sem exclusão automática

# /etc/tmpfiles.d/myapp-run.conf
d /run/myapp 0755 myapp myapp -

Idade - significa: criar no boot, nunca excluir automaticamente.

Exemplo 4: Excluir um caminho da limpeza

# /etc/tmpfiles.d/exclude.conf
x /tmp/persistent-cache

--clean ignora /tmp/persistent-cache independentemente da idade.

Aplicar e verificar regras imediatamente

# Aplicar regras de criacao agora
$ sudo systemd-tmpfiles --create /etc/tmpfiles.d/myapp.conf

# Dry run: visualizar o que --clean excluiria
$ sudo systemd-tmpfiles --clean --dry-run /etc/tmpfiles.d/myapp.conf

Sempre use --dry-run antes de executar --clean em uma nova regra. Ele mostra o que seria excluído sem fazer nenhuma alteração.

Problemas Comuns

Arquivos não estão sendo excluídos

Verifique se o campo de idade não é -. Note também que --clean usa o atime (último tempo de acesso) como limite, não o mtime.

$ stat /tmp/myfile | grep Access

Se o sistema de arquivos é montado com noatime, o atime nunca é atualizado, então os arquivos podem parecer mais antigos do que são. Use touch -a /tmp/myfile para atualizar o atime manualmente ao testar.

Regras não estão tendo efeito

Valide a configuração diretamente:

$ sudo systemd-tmpfiles --create /etc/tmpfiles.d/myapp.conf

Verifique o journal em busca de erros:

$ journalctl -u systemd-tmpfiles-setup

Sobrescrever uma regra do sistema em /usr/lib/tmpfiles.d/

Coloque um arquivo com o mesmo nome em /etc/tmpfiles.d/ - ele tem prioridade. Ordem de carregamento: /etc > /run > /usr/lib.

# Visualizar a regra do sistema
$ cat /usr/lib/tmpfiles.d/tmp.conf

# Criar sua sobreposicao e edita-la
$ sudo cp /usr/lib/tmpfiles.d/tmp.conf /etc/tmpfiles.d/tmp.conf

O que não fazer

  • Editar arquivos em /usr/lib/tmpfiles.d/ diretamente - atualizações de pacotes os sobrescrevem
  • Usar tipo D em um diretório crítico sem limite de idade - --remove excluirá todo o conteúdo

Próximas Leituras

Compartilhe este artigo

Próximo passo