web-dev-qa-db-ja.com

Linuxで必要に応じて最も古いファイルを空き領域に削除する

ログを/tmpに書き込むcronジョブがあります。ディスクの空き容量が1GB未満になったときに、最も古いファイルを自動的に削除したい。

df -ah /tmpを実行しようとしています。次に、2行目を取得し、cutを使用してavail列を取得します。次に、forループで、十分な空き容量ができるまで、-mtimeを使用してn日より古いファイルを削除し続けます。

私はおそらくこれを毎日実行されるcronジョブとして設定したいと思います。

2
yasith

Find -mtimeの代わりに、次のようにls-tを実行します。

DIR=/tmp
FREESPACE=1000000
find $DIR -type f | xargs ls -1rt | while read f ; do
  if [ `df --output=avail $DIR | tail -1` -ge $FREESPACE ] ; then
    break
  fi
  # rm -f $f
done

rm -f $fのコメントを解除して、実際に機能させます。

しかし、私は通常、少し違ったやり方をします。 cronログを/ var/logに置き、logrotateのようなものにディスクスペースの管理を処理させます。または、別の方法として、ログを/ tmp/mycronjob/*などの別のサブディレクトリに配置し、一定の日数のログファイルを保持します。ディスク容量の監視ほど柔軟ではありませんが、find /tmp/mycronjob -mtime +30 -exec rm {} \;も簡単で、より予測可能です。

2
TOertel