每周固定时间备份server的目录,目录由配置文件决定

在公司,为了安全起见,服务器经常需要备份,我这里提供一个方案:

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

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值