Meu serviço apache2 tem PrivateTmp=true
. Quando o serviço é iniciado, ele funciona bem, mas depois de alguns dias, a gravação em /tmp falha com "nenhum arquivo ou diretório". Para depurar, tentei executar nsenter -t <apache-pid> -m bash
e confirmei que /tmp
existe, mas mkdir /tmp/test
falha com "nenhum arquivo ou diretório". Eu prefiro não remover a PrivateTmp=true
diretiva.
Se eu reiniciar o serviço ele volta a funcionar.
A linha de montagem para /tmp dentro diz que está montada em /dev/nvme0n1, o que me parece estranho, mas esse é o caso quando /tmp está funcionando imediatamente após o início do serviço e quando não é gravável.
Alguém sabe por que /tmp de repente se torna ingravável?
Eu encontrei o problema.
Eu
tmpreaper
habilitei e configurei para limpar arquivos e diretórios antigos em/tmp
. Eu não tinha uma regra de exclusão para/tmp/systemd-private-*
, então tmpreaper estava excluindo o diretório tmp privado para apache2.Pelo que entendi,
PrivateTmp=true
proíbe exatamente o que você tentou quando estava depurando. O daemon criará seu próprio subdiretório e alterará seu namespace de acordo.Como seu problema só ocorre depois de algum tempo tenho o seguinte conselho: Certifique-se de que o aplicativo limpe e não armazene arquivos grandes no
/tmp
diretório virtual. Tanto quanto eu sei, este diretório está usando RAM, nenhum sistema de arquivos persistente. Você tem espaço limitado aqui.Você pode querer registrar o tamanho dos diretórios /tmp por um tempo. Se continuar crescendo esse é o problema.