思路:很多运维的小伙伴在工作中可能会遇到站点目录该怎么备份的问题,仔细思考了下思路是这样的,首先会想到很多归档工具,比如有tar、gzip、zip、cp、ln、rsync等等...但是在生产环境中并没有最好的备份工具,只有最合适的备份工具。可以通过站点的数据量决定,如果过大的话使用增量即可,如果数据量小的话随便那种都可以,根据实际我选的是zip备份。既然核心问题已经解决,剩下就是写脚本了。
脚本做了什么:这个脚本的逻辑其实很简单,首先定义站点目录,目录的命令要规范化。我这里是通过年月日命名目录,备份文件的名字呢用分时秒定义。因为是写的定时任务所以每一步都必须要有输出,不然不知道执行哪一步很可怕....附加了日志功能,当show_log等于1的时候执行的命令会在屏幕随同标准输出一并输出,等于0表示记录日志文件,也就是在测试环境的时候将他置为1。(这个方法也可以通过sh -x的方式实现,看个人习惯)。好的,这就是总体思路了。
#!/bin/bash
Script_path=$(dirname $0;pwd)
Site_dir="/home/web/www/"
Sitelist=(`ls ${Site_dir}`)
Show_Log=0
Year=`date +%Y`
Month=`date +%m`
Day=`date +%d`
Date_format=`date +%H%M%S`
Log_date=`date "+%F-%H%M%S"`
Backup_dir="/home/data/backup/$Year/$Month/$Day"
Log_Path="${Script_path}/sitebakup_err.log"
LOG(){
if [ "$Show_Log" -eq 1 ];then
echo "$*"
elif [ "$Show_Log" -eq 0 ];then
echo "$*" >>/server/scripts/sitebakup_err.log
fi
}
#打包站点目录到备份目录中
backup(){
[[ ! -d "$Backup_dir" ]]&&mkdir -p "$Backup_dir"
cd ${Site_dir}
for list in ${Sitelist[*]};do
LOG zip -r "${Backup_dir}"/"$Date_format"_"$list".zip "$list/"
zip -r "${Backup_dir}"/"$Date_format"_"$list".zip "$list"/
done
echo "============== "${Log_date}" ===================" >>/server/scripts/sitebakup_err.log
}
main(){
backup
}
main
测试结果:日志输出情况
测试结果:备份情况
这样就已经实现了我们需要的效果,可以根据时间找到备份文件,测试完成没问题最后一步需要做的就是把它写入定时任务即可
OKKKKKKKKKKKKKKKKKK