
私は DigitalOcean の小さなサーバー (月額 5 ドル) を持っていますが、そのサーバーには 20 GB のうち 16 GB しかありません。いくつかの小さなファイル (3 ~ 6 MB) を自動的にダウンロードするサイトをホストする予定で、ダウンロード フォルダーは最終的に大きくなります。毎日自動的に実行され、特定のフォルダーをチェックし、そのフォルダーが X GB を超えるとフォルダーをクリーンアップしようとする cron ジョブまたはスクリプトのようなものはありますか? (一部のファイルは使用中である可能性があります)
問題なければ、私は Ubuntu 15 を実行しています。ヒントがあれば教えてください。
答え1
以下にこれを実行するスクリプトを書きました。特に rm -r コマンドは実行していないので、問題ないことを再度確認してください。(このコマンドは、サブフォルダーを含む、指定されたフォルダー内のすべてのものを削除します。
#! /bin/bash
FOLDER=/folder/to/delete
MAXSIZEINGIGS=10
#### No User Serviceable Parts below this line ###
MAXSIZE=$(( $MAXSIZEINGIGS * 1024 * 1024 ))
FOLDERSIZE=`du -ks $FOLDER | cut -f1`
if [ $FOLDERSIZE -gt $MAXSIZE ]
then
rm -r $FOLDER/*
fi
上記のスクリプトでファイルを作成し、それを実行可能にし(chmod 755 filename)、次のような行をcrontabに追加します。
02 02 * * * ownername /path/to/file
(これは毎朝午前 2:02 に実行され、/etc/crontab に追加されていることを前提としています。ユーザーの crontab に追加した場合は、「ownername」ビットを省略してください。
とはいえ、これが良い方法なのかどうかは疑問です。まったく別のアプローチとしては、単に一定期間よりも古いファイルを定期的にすべて削除するという方法があります。crontabから1行で次のように実行できます。
02 04 * * * username find /data/spam -ctime +15 -exec rm {} +
これにより、/data/spam 内で 14 日以上経過したすべてのファイルが検索され、削除されます。