find /tmp -name "sess_*" -exec rm {} \;
Eu tenho uma pasta tmp com 14 milhões de arquivos de sessão php no meu diretório pessoal. Pelo menos é o que eu acho que é, não é como se eu pudesse ls
ou qualquer coisa.
Eu tentei usar find
com os comandos -exec rm {} \;
, mas isso não funcionou. ls 'sess_0*' | xargs rm
não fez nenhum.
No momento, estou exibindo rm -rf tmp
, mas depois de duas horas, a pasta parece ter o mesmo tamanho.
Como posso esvaziar esta pasta?
Alguém tem uma pista do que causou isso no começo? Não me lembro de ter mudado nada de importante ultimamente.
INFORMAÇÃO DE REFERÊNCIA:
De repente, encontrei um erro em que as SESSIONS não podiam mais ser gravadas no disco:
[Mon Apr 19 19:58:32 2010] [warn] mod_fcgid: stderr: PHP Warning: Unknown: open(/var/www/clients/client1/web1/tmp/sess_8e12742b62aa68a3f9476ec80222bbfb, O_RDWR) failed: No space left on device (28) in Unknown on line 0
[Mon Apr 19 19:58:32 2010] [warn] mod_fcgid: stderr: PHP Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/www/clients/client1/web1/tmp) in Unknown on line 0
eu corri:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/md0 457G 126G 308G 29% /
tmpfs 1.8G 0 1.8G 0% /lib/init/rw
udev 10M 664K 9.4M 7% /dev
tmpfs 1.8G 0 1.8G 0% /dev/shm
Mas, como você pode ver, o disco não está cheio.
Então eu dei uma olhada no syslog que diz as seguintes 20 vezes por segundo:
kernel: [19570794.361241] EXT3-fs warning (device md0): ext3_dx_add_entry: Directory index full!
Isso me levou a pensar em uma pasta completa, obviamente, mas como a minha pasta web
tem apenas 60k (tendo contado), achei que era a pasta tmp
(a local, para essa instância do php ) que estragou as coisas.
Alguns comandos que eu executei:
$ sudo ls sess_a* | xargs rm -f
bash: /usr/bin/sudo: Argument list too long
find . -exec rm {} \;
rm: cannot remove directory '.'
find: cannot fork: Cannot allocate memory
Estou executando o Debian Lenny, php5, ISPConfig, SuEXEC e Fast-CGI.
find /tmp -name "sess_*" -exec rm {} \;
Primeiro de tudo, os erros sobre não conseguir gravar em
/var/www/clients/client1/web1/tmp/
não significa que é este diretório que tem todos os arquivos, apenas que está lá tentando gravar quando registra o erro. Mas você localizou os arquivos e está prestes a removê-los.
Para a etapa de limpeza, supondo que os arquivos a serem limpos estejam em /var/www/clients/client1/web1/tmp
, primeiro se torne o mesmo usuário efetivo daquele que cria os arquivos de sessão (provavelmente um de apache
ou httpd
ou www-data
). :
cd /var/www/clients/client1/web1/tmp
ls -f | grep ^sess_ | xargs rm -f
Estou usando esse método para excluir 2,3 milhões - parece que será concluído em cerca de 10 a 15 minutos