Minecraftサーバの古くなったバックアップを自動削除

LinuxMinecraftRAMDISK運用する場合、HDDへのバックアップはほぼ必須だ。UPSがあれば保存する余裕があるが、突然電源が落ちれば全て消えてしまう。そうでなくても、不測の事態に備えるためにバックアップは必要だ。
2013-01-26追記
少なくとも正式版1.4世代では、この方法だけではワールドのバックアップが不完全。
Minecraft RemoteToolkitなどを使い定期的にマップを保存した後に、バックアップが実行されなければならない。
追記ここまで

ぼくはUbuntu Serverを使っているが、バックアップは次のスクリプトをcronで正時に自動実行している。

rsync -a /media/ramdisk/mcserver/ /home/user/backup/`date +%m%d%H%M`
これで例えば2月4日10時00分に実行された場合、02041000というディレクトリが自動的に作られバックアップされる。
ところが、正時に実行し続けると1日で24個、1週間で168個、30日で720個ものディレクトリが生成されることになる。マップが大きくなりサーバ群のサイズが100MBもあれば、30日で72GBと肥大化する。それに30日も前の、いや1週間前のデータですら、必要なのか?という疑問も浮かぶ。日々どころか時々刻々と変化するMinecraftの世界で3日前からやり直しと言われたら、やる気がなくなるだろう。ぼくはやる気を無くす。
そこで、バックアップデータは2日以上経過した時点で削除したい。マルチの世界で何か異変があったりしても、48時間以内には誰かが気づいて知らせてくれるだろうという希望的観測に基づき、2日にした。「いやいや4日くらい無いと」という人は4日にすれば良い。ぼくは2日。

バックアップ自動削除スクリプト

じゃあどうやって消すの?という話だけど、次のスクリプトで実現できてる。

rm -r /home/user/backup/`date +%m%d%H%M -d '2 days ago'`
自動パックアップスクリプトとの大きな違いは後半部分の``で囲まれた部分。ここってなんというか、簡単なコマンドを記述出来るみたい。試しにターミナルで date +%m%d%H%M -d '2 days ago' を実行してもらうと分かるのだけど、これは実行時点から丁度2日前の時刻を表示する。 date は日時表示コマンドで、 +%m%d%H%M が表示フォーマットの指定、 -d '2 days ago' で2日前を指定している。-d '2 days'だと2日後の指定。linux dateでぐぐると詳しい説明が出てくる。
2012年2月16日追記:dateコマンドはlinux系とBSD系で微妙に違うらしい
では上のスクリプトをどの様に実行しているのかと言うと、ぼくはバックアップと同時に実行している。つまり次のような1個のスクリプトにまとめている。
rsync -a /media/ramdisk/mcserver/ /home/user/backup/`date +%m%d%H%M`
rm -r /home/user/backup/`date +%m%d%H%M -d '2 days ago'`
これが正時に実行されれば、現在時刻でディレクトリを作成しバックアップした直後に、丁度2日前のバックアップディレクトリが削除される。これでバックアップディレクトリは常に48個になり、使用領域の肥大化を防ぐことが出来る。