파일을 삭제하는 쉘 스크립트/명령 최적화

파일을 삭제하는 쉘 스크립트/명령 최적화

Magento를 실행 중인데 이전 세션 데이터가 정리되지 않으므로 이를 정리하려면 쉘 스크립트/cronjob을 사용해야 합니다.

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

그러나 스크립트는 일반적으로 오래된 파일을 삭제하는 데 몇 분이 걸립니다. 이 디렉터리에는 "sess_"로 시작하는 파일만 있으므로 파일을 검색해야 하는지 궁금합니다. 하지만 여전히 어떻게든 이 파일을 반복해야 합니다. 그렇죠?

(이 디렉터리에는 매일 약 50,000개의 파일이 생성됩니다.)

답변1

rm전혀 실행하지 마세요. find가 처리할 수 있습니다.

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

답변2

디렉토리의 유일한 내용이 sess_*파일인 경우 생략할 수 -name 'sess_*'있으며 find어쨌든 탐색됩니다. 부품을 제거하여 일치하는 것이 무엇인지 테스트하십시오 -exec.

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

그런 다음 크론 작업을 위해

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

그렇긴 하지만 병목 현상이 있는 곳이 거기인지는 잘 모르겠습니다. 따라서 아마도 mikeserv의 것 같습니다.논평더 도움이 될 것입니다.

-execdir또한 보안상의 이유로 ; -exec대신을 사용해야 합니다 man find.

답변3

저는 Perl을 사용하겠습니다. Perl이 이것보다 더 빠르고 효율적입니다.find + rm

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

하루에 500,000개 이상의 로그가 포함된 로그 디렉터리를 삭제하면 약 6분 안에 삭제됩니다.

관련 정보