Otimizar um script / comando shell para excluir arquivos

2

Estou executando o Magento e ele não limpa os dados antigos da sessão, por isso preciso limpá-lo com um script de shell / cronjob:

0,30 * * * * /usr/bin/find /var/www/magento/var/session -name 'sess_*' -type f -mtime +1 -exec rm {} \;

Mas esse script demora alguns minutos para excluir os arquivos antigos. Eu estou querendo saber se eu preciso procurar os arquivos desde neste diretório são apenas arquivos que começam com "sess_" - mas eu ainda preciso percorrer esses arquivos de alguma forma, certo?

(cerca de 50.000 arquivos por dia são criados neste diretório)

    
por Chris 08.02.2015 / 03:33

3 respostas

1

Não se preocupe em executar rm , o find pode lidar com isso:

0,30 * * * * /usr/bin/find /var/www/magento/var/session -name 'sess_*' -type f -mtime +1 -delete

    
por 08.02.2015 / 03:40
0

Se a única coisa nesse diretório for sess_* arquivos, você pode deixar de fora o -name 'sess_*' , e find irá percorrer de qualquer maneira. Teste o que combinaria removendo a parte -exec .

$ /usr/bin/find /var/www/magento/var/session -type f -mtime +1

Em seguida, para o trabalho cron,

0,30 * * * * /usr/bin/find /var/www/magento/var/session -type f -mtime +1 -exec rm {} \;
Tendo dito isso, eu não tenho certeza de que este é o lugar onde o gargalo é, então talvez o comentários seriam mais úteis.

Além disso, você provavelmente deve usar -execdir em vez de -exec por motivos de segurança; veja man find .

    
por 08.02.2015 / 03:45
-1

Eu usaria perl, é mais rápido e mais eficiente para isso que find + rm

0,30 * * * * cd /var/www/magento/var/session && /usr/bin/perl -e 'for(<sess_*>){((stat)[9]<(unlink))}'

Excluir meu diretório de registro com mais de 500.000 registros diários apaga em menos de 6 minutos.

    
por 08.02.2015 / 03:52