スポンサードリンク
Categories: サーバーネット

Aipo7のバックアップを自動削除するスクリプト

Aipo7のバックアップスクリプトは、backup_handler.sh としてデフォルトで用意されているが、定期的に削除する機能は付いていないため、いちいち古いバックアップを手動で削除する必要があった。

その辺りが面倒だったので、自動的にバックアップを削除だけするスクリプトを書いてみた。backup_handler.sh を改造してもよかったのだけど、リストアスクリプトとの兼ね合いや動作検証が面倒&バージョンアップ時にバックアップスクリプトの確認・検証するのが面倒という理由で、単独で動くようにした。

前提条件として、素のままの backup_handler.sh を cron で毎日回している環境を想定している。このスクリプトも同じように cron で回せば、古いバックアップは自動で削除してくれるはず。(CentOS 6環境にて検証)

 

スクリプト内容

#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin

# バックアップを保持する日数
KEEPDAY=30

# 削除する日付のディレクトリ名を生成
RMDIR=`date --date="$KEEPDAY day ago" +'%Y%m%d'`

# Aipoのバックアップ先
B_DIR=/usr/local/aipo/backup/


cd $B_DIR

# バックアップディレクトリの階層から、バックアップディレクトリ一覧を取得
for DELDIR in `find ${B_DIR}* -type d -name "[0-9]*" -prune` ;
do
    # ディレクトリの名前から、バックアップ日時を特定する
    D_DATE=`echo $DELDIR | sed -e "s/.*\([0-9]\{8\}\)[0-9]\{5\}$/\1/g"`

    # 日付の比較
    if [ ` expr $D_DATE + 0` -le ` expr $RMDIR + 0 ` ] ; then

    #ファイル削除
    rm -rf $DELDIR
    fi
done;

 
自分の環境では正常に動作したが、全ての環境で動作を保証はできないので、at your own risk でご利用ください。

謝辞

このスクリプトの内容に関しては、以下のサイトのスクリプトを参考にさせていただきました。というか、ほとんど丸パクリです、ごめんなさい。

さくらのVPS+CentOSで設定しておきたい自動バックアップ
http://mukaer.com/archives/2012/03/14/vpscentos/

 

2013/07/16 追記

スクリプト公開のためのコードクリーニング作業に不備があり、正常に動作しないスクリプトを長期にわたり掲載しておりました(現在は修正しております)。ご迷惑をおかけして、誠に申し訳ございませんでした。

コードの不備をコメントよりご連絡いただきました、foo様、Tajio様、ご指摘いただきまして誠にありがとうございました。

スポンサードリンク
GUILZ.ORG

View Comments

  • 私もAipoのバックアップがディスクを圧迫していたので
    参考にさせて頂きました
    ありがとうございます

    私の環境では、そのままでは動きませんでしたので
    参考までに
    CentOS5.6
    Aipo7.0.0.0
    ---------------------------------------
    #!/bin/bash
    PATH=/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin

    KEEPDAY=30
    RMDIR=`date --date="${KEEPDAY} days ago" +'%Y%m%d'`

    B_DIR="/usr/local/aipo/backup/"

    cd $B_DIR

    for file in `find ${B_DIR}* -type d -name "[0-9]*" -prune` ;
    do
    D_DATE=`echo $file | sed -e "s/.*\([0-9]\{8\}\)[0-9]\{5\}$/\1/g"`
    if [ ` expr $D_DATE + 0` -le ` expr $RMDIR + 0 ` ] ; then
    rm -rf $file
    fi
    done;

    • コメントいただいていたのを見落としておりまして、すみませんでした。

      ${KEEPDAY} にしないと、変数として認識せずに動かない場合もありますよね。ちゃんとカッコで囲ってたり囲ってなかったりと、適当に作ってるせいでご迷惑をおかけしてすみません。

      ご指摘いただきありがとうございました。現在検証環境がなくなってしまったので、作成次第スクリプトも書き直して修正したいと思います。

  • 動かない理由はループの代入先がfileになっているからだよ。
    代入が$fileなのにecho $DELDIRじゃsedもできないっすw

    でも自分で考えて作るよりすげー楽でした!感謝です。

    • ご指摘ありがとうございます。仰る通り、変数名が間違っていました。

      自社の環境で動かしていたスクリプトは現在確認できないのですが、そのまま公開するのはアレだったのでコードクリーニングしたものの、必要もないのに変数名まで修正して、その上肝心のfor部分の変数名編集を忘れ、さらにはご指摘いただくまで気づいていなかったという間抜けっぷり・・・(hoo様にも同様のご指摘をいただいていたのに、見落とすというさらなる間抜けぶり・・・)。お恥ずかしい限りです。

      本日、スクリプトの方も修正いたしました。今後は公開に際して、より注意深く作業いたしたく思います。どうもありがとうございました。

Share
Published by
GUILZ.ORG
スポンサードリンク