30日前の古いデータをfindとxargsを使って自動的に削除を実現する
ログが延々と肥大化するのを何とかしたい
ログやバックアップを毎日とっていると、毎日のデータが延々と溜まっていきますが、findには◯日前の更新があったファイルをピックアップするオプションがあるので、これを利用して日々作成した一定のファイルを消してログローテションを実現します。
findのオプションとxargs
findには様々なオプションがありますが、mtimeオプションを入れると何日前に更新されたファイルをリストアップすることができますが、これだけでは消すことができないのでxargsを利用してリストアップされたファイルに対してコマンドを投げることができます。
findの例
findで5日前より古いデータのみを表示する例
$ find . -mtime +5
findで5日前より新しいデータのみを表示する例
$ find . -mtime -5
-と+では全然意味が変わってくるので注意してください
+にするとそれよりも古いもの -だと指定日数よりも新しいものをピックアップします。
xargs
lsで表示したファイルに対してrmを行う例
$ touch a
$ touch b
$ touch c
$ ls
a b c
$ ls | xargs rm
$ ls
あんまり意味が無い例ですがファイルが消されています。
毎日のバックアップを指定日数よりも古いものを削除する例
cronにmongodbを毎日バックアップする想定です
/etc/cron.dialy/mongo_backup
BACKUP_FILE=`date +"%Y%m%d-%H%M%S"`.tar.gz
#!/bin/sh
mongodump --out /tmp/dump
tar zcf /tmp/backup/$BACKUP_FILE /tmp/dump
rm -rf /tmp/dump
find /tmp/backup/ -type f -mtime +30 | xargs rm -f
mongodumpで出力したものに対して圧縮をかけて/var/backups/mongo/dumpへ保存して、
その後に30日よりも古いものをfindで探してxargsを利用して削除を行っています。
こんなかんじでログファイルやらバックアップファイルが肥大化するのを防ぐことができます。
-
前の記事
e-Leaning 構築ツールeFront 2014.03.24
-
次の記事
Facebookが公開したHack言語をインストールする 2014.04.05
コメントを投稿するにはログインしてください。