Provavelmente seria melhor mover a lógica de find
para um script que percorra todos os arquivos na linha de comando para ver se eles estão sendo acessados e, se não, exclua-os:
#!/bin/bash
for x; do
if ! /bin/fuser -s "$x" 2>/dev/null; then
rm "$x"
fi
done
Em seguida, altere o cron job para apenas
09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) -execdir thatscript.sh {} +
Isso fará com que find
colete todos os arquivos de sessão correspondentes à idade máxima e, em seguida, execute thatscript.sh
com todos eles de uma vez (devido ao +
em vez de ;
). O script é responsável por garantir que o arquivo não esteja em uso e excluí-lo. Dessa forma, find
deve ter apenas um filho direto, e o bash não deve ter nenhum problema em limpar os filhos fuser
e rm
.
A partir dos documentos de find
, não está claro se a localização dividirá automaticamente a lista de nomes de arquivos em múltiplas execuções se excederem os limites do shell / OS (e 13000 arquivos podem fazer isso ... versões mais antigas do bash tiveram um limite de argumento de linha de comando padrão de algo em torno de 5000) Nesse caso, você pode alterar -execdir thatscript.sh {} +
para -print0 | xargs -0 thatscript.sh
para ter xargs
dividir os arquivos.
Como alternativa, se você não tiver a unidade montada noatime
, altere -cmin
para -amin
e dispense completamente os testes:
09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -amin +$(/usr/lib/php5/maxlifetime) -delete
Isso removerá todos os arquivos da sessão por último acessados mais do que [saída do comando maxlifetime
] minutos atrás. Contanto que você não tenha nenhum processo php que abra uma sessão, então fique sentado por um longo tempo (o padrão para esse maxlifetime no Debian parece ser de 24 minutos, o que seria muito muito tempo para um página para carregar) sem fazer nada, isso não deve zapar as sessões atualmente em uso.