サーバの自動処理で作成しているファイルが一部しか出来ていないとの連絡が来た。
慌てて調べてみると処理途中のファイルを置いているディスクが満杯・・・・・・
幸い元ファイルは残っていたので、古いファイルを削除してディスクを空けてから再度作成処理を走らせて事なきを得た。
古いファイルは自動で削除するようにしてあったが、予想以上にファイルが大きくなっているので、ディスクを圧迫していたようだ。
なので保管期間を短くするようにスクリプトを書き換えた。
明日の朝チェックしてみて問題無いようだったら当面はそのままにしておこう。
今のスクリプト内では日付を取り込んでファイル名に付けているので、古いファイルを削除するにも該当の日付さえ取れれば良いことになる。
そこで下記のようにして2ヶ月前の日付を取り込むようにした。
file-name=`/bin/date –date ‘2months ago’ +%Y%m%d`
ここで”%Y%m%d”というフォーマットは
20120913
となるので(2012年9月13日の場合)、上記の場合”file-name”には”20120713″と2ヶ月前の日付の文字列が入ることになる。
スクリプトではこの後で
/bin/rm $file-name
のようにして2ヶ月前の日付のファイルを削除している(もちろんファイルの場所のpathの設定は必須だけどこの例では省略)。
ファイル名に日付を入れていない場合には、findコマンドで2ヶ月(60日)前に作られたファイルを探して削除するようにすればOKかな?
例えば
/bin/rm `find (PATH)/ -ctime +60 -type f -print`
のようにすれば60日以前に作成されたファイルが削除出来るはず。
4 comments to this article
ちゃがま
on 2012 年 9 月 13 日 at 12:00 PM -
そう。2 months ago でやると、月の日数の違いにより、月末にゴミが残ったりするので、
60 days ago とかにするか、find と組み合わせるのがよろしいです。
ついでに言うと、年/月/ なディレクトリ構造にして、1ディレクトリに大量に溜まらない &
月次に別処理で、ディレクトリごと削除しちゃう。とかにすると楽かも。
tan
on 2012 年 9 月 13 日 at 2:29 PM -
>ちゃがまさん
一日分くらいのゴミは残っても大したことはないので、あまり気にしていませんでした。
今度は仰るようにdayのほうでやってみます。
ディレクトリ構造は西暦年/月にしていますので、最大でも31個しかファイルが存在しないようになってます。
月次の処理は作っていないので、今度暇をみてディレクトリごと削除するようなスクリプトを書いてみます。
単にdate –date ‘2month ago’ +”%Y”とdate –date ‘2month ago’ +”%m”で年と月を取れば簡単に出来そうですね。
いろいろ御指導ありがとうございます。
ちょろ
on 2012 年 9 月 13 日 at 5:21 PM -
うちだとタイムスタンプですが7日分保持で
find (PATH) -name “*.out” -mtime +7 -type f -exec rm -f {} \;
こんな事してます。
tan
on 2012 年 9 月 13 日 at 6:42 PM -
>ちょろさん
それだと一行で済みますし、findの結果を評価することも無いのでファイル数が多くても大丈夫そうですね。