linux下同步數據腳本

因爲公司擔心服務器硬盤損壞導致數據丟失,但是公司規模又不是很大,在節約成本的前提下找了一臺電腦用來做備份服務器。因爲服務器不允許安裝任何的軟件,所有的操作只能2在備份服務器上,而且數據服務器上也沒有nfs和samba。所以我寫了一個腳本來實現數據的同步,使用計劃任務來調用。

#!/bin/bashbr/>#Author:[email protected]
#自動備份數據到本地目錄,並且生成日誌文件,方便查看
ip='172.16.200.58'
#定義服務器ip地址
erlog='/var/log/backuperro.log'
#錯誤日誌文件
oklog='/var/log/backup.log'
#正確日誌文件
yu(){
expect << EOF
spawn ssh-copy-id -o StrictHostKeyChecking=no root@$ip
expect "password" { send "1234564\r" }
expect "#" { send "echo ok\n" }
EOF
}
#定義函數yu,自動發送公鑰到服務器
timeout 10 ssh -o StrictHostKeyChecking=no root@$ip ls
#在遠程主機上執行ls命令,如果需要手動輸入密碼就會等待,等待超過10秒結束這條語句
if [ $? -ne 0 ];then
#判斷上一條語句是否執行不成功
rpm -q expect &> /dev/null
#檢測expect是否安裝
if [ $? -ne 0 ];then
yum list | grep expect &> /dev/null
#檢測yum當中是否有expect
if [ $? -ne 0];then
echo "執行此操作需要安裝expect,請手動安裝expect或者手動將公鑰發送到服務器。"
exit 5
fi
else
yum -y install expect
fi
if [ ! -f ~/.ssh/id_rsa ] ;then
#檢測私鑰是否不存在
ssh-keygen -q -f ~/.ssh/idrsa -N ''
#非交互式生成公鑰和私鑰到當前用戶家目錄下/.ssh/下
fi
yu &> /dev/null
#執行函數yu,並且把結果丟到黑洞
fi
ti=date +"%Y年%m月%d日 %H點%M分%S秒"
#獲取當前的時間給變量賦值
#格式如: 2019年01月10日 14點19分11秒
[ id yuback ] || useradd -s /sbin/nologin yuback
#檢測到沒有用戶,創建用戶
for hlog in $erlog $oklog
do
[ ! -f "$hlog" ] && touch $hlog
#檢測文件是否存在,不存在創建用戶
ls -l $hlog | grep yuback &> /dev/null
#檢測文件的屬主和屬組是否是yuback
[ $? -ne 0 ] && chown yuback:yuback $hlog
#如果不是就更改文件歸屬
done
scp -r root@$ip:/hana/backupset/HBP/ /filebackup/HANA/
#複製服務器/hana/backupset/HBP/目錄下的文件到本地/filebackup/HANA/,遞歸複製
if [ $? -ne 0 ];then
#判斷上面一條命令是否執行不成功
echo "${ti} 備份發生錯誤,請手動查看錯誤原因" >> $erlog
#將當前時間和後面的文字追加寫入錯誤如日誌 ,把這個文件定義爲錯誤日誌
exit 2
#直接退出不執行下面的所有操作,返回錯誤碼爲2
else
echo "${ti} 備份成功!" >> $oklog
#將當前時間和後面的文字追加寫入正常日誌 ,把這個文件定義爲正確日誌
fi
find /filebackup/HANA/QAS/ -type f -mtime +2 -exec rm -f {} \;
#查找/filebackup/HANA/QAS/目錄下3天之前的類型爲文件的,強制刪除
if [ $? -eq 0 ];then
#判斷上面一條命令是否執行成功
echo -e "${ti}\t備份成功!\t刪除3天前備份成功!" >> $oklog
#將“刪除3天前備份成功!”寫到正常日誌當中
##格式如: 2019年01月10日 14點19分11秒 刪除3天前備份成功!
else
echo -e "${ti}\t備份成功!\t刪除3天前備份失敗!請手動查看文件信息。" >> $oklog
#將“刪除3天前備份失敗!請手動查看文件信息。” 寫到正常日誌當中
#格式如: 2019年01月10日 14點19分11秒 刪除3天前備份失敗!請手動查看文件信息。
fi
for rz in $oklog $erlog
do
logsize=$(ls -l $rz | awk '{print $5}')
if [ "$logsize" -ge 104857600 ];then
#如果文件大小大於等於100M
rq=`head -1 $rz | awk -F[\ 年月日] '{print $1$2$3}'
dq=$(date +'%Y%m%d')
dirnm=/var/log/$rq
$dq
#定義目錄爲/var/log/下以日誌開頭的第一行的年月日_當前年月日
if [ ! -d $dirnm ];then
mkdir $dirnm
chown yuback
#如果目錄不存在,創建目錄
fi
fi
mv $rz $dirnm
#移動日誌到指定的目錄
done

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