ファイルを削除するシェルスクリプト/コマンドの最適化

ファイルを削除するシェルスクリプト/コマンドの最適化

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))}'

1日に500,000を超えるログを含むログディレクトリを削除すると、約6分で削除されます。

関連情報