利用lftp的mirror功能,完全備份遠程主機的網站資料,並有輪替功能。各網站ftp連接資料已保存到lftp的bookmarks
2012.05.17更新代碼
#!/bin/bash#backup website, use lftp mirror command.
#create at 2012.04.16 by joseph
#update at 2012.05.04 by joseph, update option input
#update at 2012.05.08 by joseph, update rotate#各網站ftp用戶名密碼已保存在lftp的bookmark, bookmark裡的名稱對應為網站URL
if [ ! $1 ];then
echo "Usage: $0 {all|show|\$URL…}"
exit 10
fiallwebsite=$(awk ‘{ print $1 }’ ~/.lftp/bookmarks)
#檢測參數中URL是否存在於lftp的Bookmarks中
checkURL() {
for i in $@
dotrue=0
for x in $allwebsite
do
if [ $i = $x ]; then
true=1
break
fi
done
if [ $true -eq 0 ]; then
echo "URL:$i not in bookmarks, pls check"
exit 1
fidone
}#可在參數中指定備份特定網站,可寫多個URL參數。
case "$1″ in
all)
website=$allwebsite
;;
show)
echo "Bookmarks list:"
for i in $allwebsite
do
echo $i
done
exit 0
;;
*)
checkURL $@
website=$@
;;
esacmydate=`date +%Y%m%d`
backup_path="/home/joseph/website"
log_file="website.log"
log_path="$backup_path/$log_file"
rotateNum=5 #備份檔數量
tmp_path=$backup_path/tmp#輪替檔函數, $1備份路徑, $2需備份目錄, $3備份數量
rotateDir() {
for x in `seq $(($3 – 1)) -1 1`
do
if [ -d $1/$2.$x ]; then
/bin/rm -rf $1/$2.$(($x + 1))
/bin/mv $1/$2.$x $1/$2.$(($x + 1))
fi
done
}echo "————— $mydate —————" >> $log_path
for i in $website
do
echo "[PID:$$]`date +%H:%M`, $i backup begin" >> $log_path
/usr/bin/lftp -c "set net:max-retries 3;open $i&&mirror -c –ascii . $tmp_path" 2>> $log_pathif [ $? -eq 0 ]; then
rotateDir $backup_path $i $rotateNum
/bin/chmod -R 755 $tmp_path
/bin/mv $tmp_path $backup_path/$i.1
else
echo "connect error, mirror failed" >> $log_path
fiecho "[PID:$$]`date +%H:%M`, $i backup end" >> $log_path
echo "" >> $log_path
done
echo "—————————————-" >> $log_path
echo "" >> $log_path
腳本還有很多不完善地方,歡迎交流。下一步改善方向,讀取lftp的bookmarks文件,以匹配備份網站名稱,優化輪替功能,及改善lftp連接出錯後的判定。















