Eu tenho feito muitos esforços ultimamente para resolver problemas semelhantes em servidores sob minha alçada.
A resposta simples é basicamente apenas: systemd-tmpfiles --clean
é uma bagunça quente e você deve procurar alternativas
A resposta menos simples é um pouco longa.
systemd-tmpfiles
realiza várias tarefas, mas a principal delas não está relacionada à opção --clean
: garantir que o estado de seu sistema seja apropriadamente "redefinido" durante as reinicializações. Isto é, assegura que diretórios e arquivos que precisam existir por várias razões sejam criados, e aqueles que não deveriam existir sejam removidos (junto com uma longa lista de itens relativamente esotéricos como criar subvolumes e quotas do sistema de arquivos, bloquear dispositivos, etc. , alterando permissões, atributos do SELinux, etc. Veja a manpage se você está curioso sobre tudo). Essas tarefas são executadas por systemd-tmpfiles --create
(para a maioria das coisas) e systemd-tmpfiles --remove
(para remoção de arquivos e diretórios). Esses dois subcomandos consideram, aproximadamente, o início de cada linha de configuração: o primeiro campo é o tipo de ação, o segundo o destino, o terceiro o modo etc. Geralmente, algo como systemd-tmpfiles --create --remove
é executado logo após a inicialização do sistema , antes de qualquer coisa que possa depender das ações necessárias. Uma coisa importante a notar é que essas ações nunca olham para o quinto argumento, o parâmetro Age. É aí que entra --clean
.
systemd-tmpfiles --clean
basicamente pega carona na parte superior dessa infraestrutura por meio de um único campo adicionado: o campo Idade. Ele considera apenas alguns dos tipos específicos de ações que os outros subcomandos executam, porém: d, D, v, q, Q, C
e também x
e X
(que existem apenas para excluir itens específicos de sua limpeza). Os que são relevantes para casos de uso normais são apenas d
e D
, embora usados para diretórios, criação-se-não-existe e criação-se-não-existir-ou-esvaziar -se-faz, respectivamente. Com as idades marcadas, systemd-tmpfiles --clean
removerá o caminho listado quando a idade for mais antiga que a configurada.
Aqui está o problema: significa realmente o caminho listado apenas - a marcação de idade não é aplicada recursivamente ao conteúdo da pasta. Isso significa que as linhas de configuração da sua pergunta sempre removerão a totalidade de /tmp
ou /var/tmp
e somente se nada acontecer dentro de 10 ou 30 dias, respectivamente. Para piorar as coisas, nenhuma das coisas que afetam a idade suporta globs, exceto x
e X
, que são para excluir as coisas da limpeza.
A página tmpfiles.d
lista uma coisa interessante que pode funcionar para o seu caso, se você tiver sorte: "Se o campo de idade começar com um caractere til" ~ ", a limpeza será aplicada apenas aos arquivos e diretórios um nível dentro do diretório especificado, mas não os arquivos e diretórios imediatamente dentro dele. " - no meu caso, a limpeza precisava acontecer dois níveis abaixo de /tmp
, então não havia como usar isso com bons resultados.
Procure outras soluções para limpar o conteúdo do diretório /tmp
, que considera seu objetivo principal, em vez de ser colocado no final como systemd-tmpfiles --clean
.