我的想法是这样:让系统自动备份,每隔NUM天,把原来的备份覆盖一遍,硬盘上一共保留NUM个备份文件(如果留太多备份文件硬盘空间不够),这样网站可以还原至NUM-1天前的状态,便于webmaster及时发现错误完成恢复。
#!/bin/bash
#保留的备份文件的个数(或备份间隔的天数)
NUM='3'
#备份文件保存的路径
BACKUP_PATH='/home/backup/ftp'
#/home/backup/etc/ftpuser.pw中保存ftp主机、用户名、密码等,每行为一
#个FTP用户,第一列为主机名,第二列为用户名,第三列为密码,中间用TAB键
#格开
PASSWD_FILE='/home/backup/etc/ftpuser.pw'
for ((H=1;$H<$NUM;H++));
do
N=`date +%H`
num=`expr $N % $NUM`
if [ ${num} -eq ${H} ] ; then
while read x y z
do
echo "Starting Backup......................................................."
echo "Host:"$x" User:"$y" Password:********"
echo "Checking Directory..................................................."
if [ ! -d ${BACKUP_PATH}/$x ]; then
echo "Directory $BACKUP_PATH/$x is not exist,Creatting Directory."
mkdir -p ${BACKUP_PATH}/${x} &>/dev/null && echo "Directory $BACKUP_PATH/$x has been Created."
sleep 1
fi
if [ ! -d ${BACKUP_PATH}/$x/$y ]; then
echo "Directory $BACKUP_PATH/$x/$y not exist,Creating Directory."
mkdir -p ${BACKUP_PATH}/${x}/${y} &>/dev/null && echo "Directory $BACKUP_PATH/$x/$y has been Created."
sleep 1
fi
echo "Downloading files....................................................."
wget -q -nH --passive-ftp -r -N -l inf -P$BACKUP_PATH/$x/$y ftp://$y:$z@$x
echo "Download complete!"
echo "Compressing files....................................................."
cd $BACKUP_PATH/$x/
tar -czvf $y$H.tar.gz $y >/dev/null 2>&1
echo "Compressing complete."
echo "Deleting temp files..................................................."
rm -rf $BACKUP_PATH/$x/$y
sleep 1
echo "Delete comelete."
echo "Backup done."
done<$PASSWD_FILE
fi
done
把这个脚本保存为FtpBackupTools,属性为700,放到/etc/cron.daily下面,这样脚本每天备份一次,每隔NUM天把原来的备份覆盖。
刚开始写SHELL,不足之处请大家指点。

