rdiff-backup遠程備份腳本

任務:主機A存放備份的文件夾是/data/backup/主機B名稱/axel_coin/,需要備份主機B的/roo/.axel/到存放備份的文件夾,每小時備份一次,將超過7天的備份刪除,主機B也要備份主機A的文件夾。

腳本如下

#!/bin/bash

check_step() { #檢測上一個命令執行是否成功,如果失敗就發送郵件通知
if [[ $? == "0" ]]; then
:
else
echo " "|mail -s "failed rdiff-backup ${1}-${DATE}" ${MAILTO}
fi
}

#Script usage
if [ $# -ne 1 ];then #參數1是要備份的主機名或IP地址
echo "Usage: $0 remote-hostname"
exit 1
else
export PATH=${PATH}:/bin:/sbin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin
BACKUPFILE=/root/.axel #要備份的文件夾
KEEP_DAYS=7
REHOST="$1" #將參數1賦值給REHOST變量
BACKUPDIR="/data/backup/${REHOST}/axel_coin" #存放備份文件的文件夾
LOG=${BACKUPDIR}/rdiff-backup-data/backup.log #日誌文件,改文件由rdiff-backup在備份的時候生成
BAC_USER="gback" #備份用戶br/>MAILTO="[email protected]"
DATE=date +%Y%m%d%H%M%S
exec &>/tmp/.backupaxel
fi

#$DIR directory exists ? #判斷存放備份的文件夾是否存在
if [ ! -d "$BACKUPDIR" ];then
mkdir -p "$BACKUPDIR" #由於是在根目錄創建文件夾,一般用戶沒有權限,通過puppet創建
fi

#Ridff-backup #執行rdiff-backup遠程備份
/usr/bin/rdiff-backup --print-statistics --remote-schema 'ssh -C %s "sudo /usr/bin/rdiff-backup --server"' ${BAC_USER}@${REHOST}::${BACKUPFILE}/ ${BACKUPDIR}/
check_step #調用檢測命令是否執行成功的函數

#View backup log
Num=tail -5 ${LOG}|awk '/Error/{print $2}' #查看最新產生的日誌中的error字段的值是多少
if [ $Num -ne 0 ];then #如果error的值不爲0,就郵件通知
tail -5 ${LOG}|mail -s "failed rdiff-backup ${1}-${DATE}" ${MAILTO}
fi

#Clear backup before 7 days #刪除超過7天的備份
rdiff-backup --remove-older-than 7D ${BACKUPDIR}

echo $?

puppet的配置

file { '/data/backup': #爲備份用戶創建文件夾,確保權限,這樣用戶可以創建子文件夾了
ensure => 'directory',
owner => 'gback',
group => 'gback',
mode => '0755',
}

include profile::sudo::gback #sudo的配置,讓用戶可以免密碼使用rdiff-backup命令

package {'rdiff-backup': ensure => 'present',} #確保遠程主機上安裝了rdiff-backup軟件

file { '/usr/local/bin/backup_axel_coin.sh': #將備份腳本分發到備份主機,存放目錄是/usr/local...........
owner => 'root',
group => 'root',
mode => '0755',
source => 'puppet:///modules/profile/backup_axel_coin.sh',
}

file { '/etc/cron.d/backup_axel_coin':    #設置cron,每小時執行一次,$1寫的就是備份的主機名
owner   => 'root',
group   => 'root',
mode    => '0644',
content => "0 * * * * gback /usr/local/bin/backup_axel_coin.sh **$1** 1>/dev/null 2>&1  \n"

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章