在公司,为了安全起见,服务器经常需要备份,我这里提供一个方案:
1.可以在一个固定的文件下读取要备份的目录;
2.每周定期备份一次要备份的目录;
3.像队列一样,只保留最近两周的文件;
挂载备份服务器的网盘到本地
#sudo mount -t nfs 10.180.8.25:/data/ /filebak/
解析文件,并做备份
#!/bin/sh
##############################################################################
# author: zhangqiang (30433698@qq.com)
# backup facc1 server
# sudo /home/zhangqiang/versionRelease/facc1_backup.sh > baklog_`date "+%Y%m%d"`.txt
##############################################################################
#backup configure file, the file include facc1 all of path that need to backup.
BACKUP_CFG_FILE=/home/samba/group_admin/backup_cfg/facc1_backup_cfg.txt
dos2unix $BACKUP_CFG_FILE #switch to unix format
#sudo mount -t nfs 10.180.8.25:/data/share/facc1 /filebak/
BASE_PATH_SAMBA=/home/samba/
#BACKUP_PATH:
BACKUP_DIR_NAME=
function backup_dir()
{
echo " "
SRC_ABS_PATH=$1
DIR_PATH_NAME=$2
if [[ ! -d /filebak/$BACKUP_DIR_NAME/$DIR_PATH_NAME ]]; then
mkdir -p /filebak/$BACKUP_DIR_NAME/$DIR_PATH_NAME
fi
date "+%Y-%m-%d %H:%M:%S"
echo "FROM: $SRC_ABS_PATH:"
echo "TO : /filebak/$BACKUP_DIR_NAME/$DIR_PATH_NAME"
cp -rf $SRC_ABS_PATH/* /filebak/$BACKUP_DIR_NAME/$DIR_PATH_NAME
echo "copy done"
}
function backup_all()
{
for i in `cat $BACKUP_CFG_FILE | grep ^BACKUP_PATH:`
do
#delete BACKUP_PATH: of BACKUP_PATH:Documents1
SAMBA_PATH=`echo ${i#*:}`
#echo $GET_PATH
#change path to absolute PATH
ABS_PATH=`echo "$BASE_PATH_SAMBA$SAMBA_PATH"`
#echo $ABS_PATH
backup_dir $ABS_PATH $SAMBA_PATH
done
}
############################################################################
############################################################################
BACKUP_DATE=`date "+%Y%m%d"`
cd /filebak/
# STAGE1: list directory: filebak/ all of dir
FOLDER_NUM=`ls -l | grep ^d | awk '{print $9}' | grep ^bak_ | wc -l`
dir_counter=0
if (( $FOLDER_NUM < 2 )); then
#mkdir -p /filebak/bak_$BACKUP_DATE
mkdir -p bak_$BACKUP_DATE
else
for filename in `ls -l | grep ^d | awk '{print $9}' | grep ^bak_`
do
DIR_ARRAY_NAME[$dir_counter]=$filename
dir_counter=$(( $dir_counter+1 ))
done
fi
# STAGE2: compare two dirs, delete minor dir
CURRENT_PATH=`pwd`
#second confirm, i am afraid to remove files.
if [[ $CURRENT_PATH == "/filebak" ]]; then
if [[ ${DIR_ARRAY_NAME[0]} < ${DIR_ARRAY_NAME[1]} ]]; then
rm -rf ${DIR_ARRAY_NAME[0]}
else
rm -rf ${DIR_ARRAY_NAME[1]}
fi
fi
sleep 1
# STAGE3: create a new directory by last date
mkdir -p /filebak/bak_$BACKUP_DATE
BACKUP_DIR_NAME=bak_$BACKUP_DATE
echo "backup path: ---> $BACKUP_DIR_NAME"
# STAGE4: backup last file to new directory
cp -rf /home/git $BACKUP_DIR_NAME/
backup_all
cd -
定期自动备份实现
#sudo crontab -e
30 20 * * 6 /home/zhangqiang/versionRelease/facc1_backup.sh > /filebak/baklog_`date "+\%Y\%m\%d"`.txt
每周六晚上8:30份开始备份
#sudo /etc/init.d/cron stop
#sudo /etc/init.d/cron start
查看定时任务列表
#sudo crontab -l
10 4 * * * tar -zcf /root/backups/document.tgz /home/samba/document
10 4 * * * tar -zcf /root/backups/public.tgz /home/samba/public
30 20 * * 6 /home/zhangqiang/versionRelease/facc1_backup.sh > /filebak/baklog_`date "+\%Y\%m\%d"`.txt