2013-08-07

バックアップ用シェルの作成

AサーバのSAMBAディレクトリを旧サーバでるBサーバへ自動バックアップするシェル

WakeOnLANで夜間に旧サーバを自動起動しバックアップを行い
終了時にsshで相手へログインしてシャットダウンして終わる

スクリプトはAサーバ側で深夜にCRONで起動する
エラーが出たらメールで通知する(/script/ruby2mail.rb)

スクリプト中の 192.168.1.◆◆◆ はバックアップ先の旧サーバのIPアドレス

--------------------------------------------------------------------------------

#! /bin/bash


# 排他実行用ロック
LOCKED="/tmp/backup.lock"

#エラーメール送信先
address="****@gmail.com"
subject="[SERVER]ファイルサーバ"

cd /script/

YOUBI=$(date '+%w') # 曜日取得


#------------------------------------------------------------------------------#
# 実行前に排他処理を行う
#------------------------------------------------------------------------------#

trap 'echo "trapped."; rmdir $LOCKED; exit 1' 1 2 3 15

CNT=1
until mkdir $LOCKED 2> /dev/null; do
    sleep 5
    CNT=`expr $CNT + 1`
    if [ $CNT -gt 3 ]
    then

        echo "LOCK!"

        #メール送信
        /script/ruby2mail.rb "バックアップ処理 二重起動ロックにて実行中止"
        exit 0;
    fi
done



# 土曜深夜(日曜)と日曜深夜(月曜)はネットワークバックアップは行いません
if [ $YOUBI -ge 2 ]; then

    # 旧住宅部サーバの起動
    # to 192.168.1.◆◆◆ backupfsへのバックアップ
    wakeonlan -i 192.168.1.255 00:01:80:77:b3:5f

    sleep 160

    PINGCHK=$(ping -c 1 192.168.1.◆◆◆|grep "Unreachable")

    for PINGS in $PINGCHK
    do
        echo $PINGS
        if [ ${PINGS} = "Unreachable" ]
        then
            echo "バックアップサーバ起動を確認できませんでした"
        #メール送信
            /script/ruby2mail.rb "192.168.1.◆◆◆が起動していません(処理中断)"
            rmdir $LOCKED
            exit 0;
        fi
    done

    echo "ネットワークバックアップ開始"
    # ※昨日のバックアップを旧サーバへバックアップします
    rsync -Hazrtpog --progress -delete -e ssh /samba/backup/ 192.168.1.◆◆◆:/samba/backup1/
    echo "ネットワークバックアップ終了"

    echo "旧サーバシャットダウン"
    ssh 192.168.1.◆◆◆ "shutdown -h now"

fi


# 内部バックアップ
echo "内部バックアップ開始"
rsync -Ha --progress -delete /samba/share /samba/backup
echo "内部バックアップ終了"


# ロック解除
rmdir $LOCKED

# EOF

0 件のコメント:

コメントを投稿