また何かのときに使えるかもしれないのでメモ。
ちまたにはバックアップソフトを買うだとかするようですが、rsync コマンドを使ってクーロンで動かせば基本的なことは足りてしまう。以下、バックアップサーバ(バックアップファイルをためるサーバ)にてクーロンでまわしているシェルの基本部分抜粋。
参考にしたのはいつもお世話になっているところからココ。ただ、バッククライアント側で rsync を実施しているので、こちらの方法は異なる。
動作の特徴
-
バックアップサーバから rsync コマンドを使ってファイル/ディレクトリを取得</p>
- プロトコルは ssh を使ってパスワードなし key を使う
-
バックアップ先は list に記述
- 記述例) 192.168.0.100://root/backup
-
バックアップ保存先は仮で /home/backup 配下にしている
- 最新のバックアップファイル/フォルダは new ディレクトリに保存
- 前日以降分は biz2 で圧縮して old ディレクトリへ移動
- old ディレクトリ内の圧縮ファイルは365日経過したら削除
- 処理の詳細は /var/log/backup.log に記述
- 処理でエラーしたら root あてのメールが飛ぶ
#!/bin/bash LANG=C # 設定開始 USER=backup # バックアップ対象リスト名 BACKUPLIST=/home/$USER/script/list [ ! -s $BACKUPLIST ] && echo "$BACKUPLIST is not found" && error_exit # バックアップ先ディレクトリ名 # 最新 new, 過去分 old BACKUPDIRNEW=/home/$USER/backup-files/new BACKUPDIROLD=/home/$USER/backup-files/old mkdir -p $BACKUPDIRNEW mkdir -p $BACKUPDIROLD # バックアップ保存世代数 # ※当日分を含めた過去分バックアップを保存する世代数 # ※過去分バックアップを保存しない場合は1を指定する BACKUPGEN=365 # バックアップログファイル名 BACKUPLOG=/var/log/backup.log # 異常終了処理関数定義 error_exit () { exit 1 } # バックアップログファイル作成 # 1回分のみ保持 rm -f $BACKUPLOG if [ ! -f $BACKUPLOG ]; then touch $BACKUPLOG chmod 644 $BACKUPLOG fi # バックアップファイルの履歴 # 新しいファイルは new # 前のファイルはoldディレクトリ以下に日付入りの圧縮ファイルにする cd $BACKUPDIRNEW LINECOUNT=`ls |wc -l 2>/dev/null` echo "#### `date` backup start ####" >> $BACKUPLOG if [ $LINECOUNT -ne ]; then TIMESTAMP=`date +%y%m%d-%H%M%S` tar jcvfP $BACKUPDIRNEW/${TIMESTAMP}backup.tar.bz2 $BACKUPDIRNEW >> $BACKUPLOG 2>&1 mv $BACKUPDIRNEW/${TIMESTAMP}backup.tar.bz2 $BACKUPDIROLD/ > /dev/null 2>&1 fi # バックアップ実行 # key にて ssh rsync パスワードなし while read LINE do rsync -avz --delete -e "ssh -i /home/$USER/.ssh/id_rsa" $USER@$LINE $BACKUPDIRNEW/ >> $BACKUPLOG 2>&1 done < $BACKUPLIST code=$? if [ $code -ne ]; then cat $BACKUPLOG | mail -s "BACKUP NG CODE IS $code" root error_exit fi echo "#### `date` backup end ####" >> $BACKUPLOG # バックアップ保存世代を超えた古いバックアップを削除 if [ $(ls $BACKUPDIROLD/ |wc -l) -gt $BACKUPGEN ]; then OLDBACKUPCNT=`expr $(ls $BACKUPDIROLD/ |wc -l) - $BACKUPGEN` for file in `ls -t $BACKUPDIROLD/ |tail -n $OLDBACKUPCNT` do rm -f $BACKUPDIROLD/$file done fi</div>