2012年1月7日土曜日

Windowsタスクスケジューラとシェルスクリプトを使って、サーバーのバックアップを自動化したい

この記事を読んだ。

>PCのバックアップやデフラグなど、ソフト側でスケジュール化できるものは自動化を優先し

あー、やっぱりバックアップは自動化するべきなんだなぁ・・・。

家のサーバーのバックアップは手動で

1. VMWareESXi上で、仮想ハードディスクをコピー

2. サブマシンにコピー

3. 外付けハードディスクにコピー

を行なっている。基本的に週一で、土曜日に行う。

手動で、しかもサブマシンはLAN外には公開していないので外出時にはバックアップを取ることができないといえば、できない。

ちょっと、問題には思っていた。

という訳で、バックアップ処理の自動化を行うべくスクリプトを書く。

今回は、Cygwin上でSSHのリモートコマンドを実行し、最終的にサブマシンにコピーする部分までを一気に行う。

外付けハードディスクは、実は常時通電をしておらず、バックアップの時のみ手動で電源を入れている。この作業の自動化は今回は見送る。

と言うか、無理なんじゃないだろうか・・・?

これが、今回用意したスクリプト
backup.sh

backup.sh
#!/bin/sh

USER_NAME=user_name
HOST_NAME=host_name_OR_ip_adress
BACKUP_CMD=vmfs/volumes/DateStore1/backup.sh

TARGETS="Server1 Server2"

STORE_DIR=/cygdrive/G

delete_old_data(){
        ssh $USER_NAME@$HOST_NAME rm -rf /vmfs/volumes/DateStore2/*
}

delete_old_data

for target in $TARGETS; do
        ssh $USER_NAME@$HOST_NAME $BACKUP_CMD $target
done

scp $USER_NAME@$HOST_NAME:~/vmfs/volumes/DateStore2/* $STORE_DIR

delete_old_data


ま、これだけですね。
$BACKUP_CMDは事前に用意したVMWareESXiで仮想ハードディスクをコピーするためのコマンド。このサイトを参考に作った。

ちなみに、参考サイトではCRONを使って自動化を行なっている。というのも、別のNFS別のサーバーにコピーしたファイルを転送しているため。

今回は、サブマシンがWindowsなのでその手段がとれない(できるけど、面倒くさい)。

Winndowsと言うことで、自動化はタスクスケジューラを使う。

コントロールパネル→管理ツール→タスクスケジューラ

”基本タスクの作成”

から、名前と説明を入力し

トリガー:毎週
    毎週:開始日、間隔、曜日を設定。

操作:プログラムの実行
    プログラムの開始:sh.exeのパスをプログラム/スクリプトに、さっき書いたスクリプトのパスを、引数の追加(オプションん)に入力。
   
これで完了ですね。

設定が正しいかどうかは、追加したタスクを選択して実行をクリックする。

これで、バックアップも自動で行えるようになりました。

あとは、アップデートかなぁ・・・?サーバーたちのアップデートは毎晩行うように設定してありますが、Windowsマシンはどうでもないので。

これは、大したことでもないでしょうね。

0 件のコメント:

コメントを投稿