shell+配置文件实现日常维护自动备份目标应用

shell+配置文件实现日常维护自动备份目标应用

需求场景

项目组要在重大节假日前备份关键应用。这些应用分布在不同的服务器上,之前是运维小姐姐手动一个一个备份。虽然量不大(大概四十个应用),但是也是挺费时间的一个事,所以决定简单写个脚本自动备份。

设计思路

考虑到脚本的普适性,决定使用配置文件将需要备份的主机信息以及应用信息保存起来,脚本读取配置文件中的信息然后执行备份操作。备份最基础需求:准确备份主机下的应用(有可能有需要排除的目录),并保留必要的日志信息。
后期考虑使用web框架开发一个管理后台,统一管理和简化这些简单但耗时耗力的运维工作。

脚本编写

基于以上思路,编写了初版脚本实现

#!/usr/bin/bash
#
# @author: charlie
# @mail: charlie2cindy@163.com
# @date: 2021-02-08
# @descriptions: 脚本用于日常应用数据或其他数据的目录备份,需要将配置文件backs.conf与该脚本一同
#                放置于要备份目录的同级目录下
#

bak_host=$1
basic_command="tar -cvzf "
back_date=`date '+%Y%m%d'`
conf_start=`grep -n "$bak_host" backs.conf | awk -F':' '{print $1+1}'`
echo $conf_start
app_parent_dir=`sed -n "$conf_start,/\[/p" backs.conf | sed -n '/\[/!p' | grep "par_dir" | awk -F'\=' '{print $2}'`
echo $app_parent_dir
app_in_conf=`sed -n "$conf_start,/\[/p" backs.conf | sed -n '/\[/!p' | grep "all_apps" | awk -F'\=' '{print $2}' | awk -
F':' '{for(i=1;i<=NF;i++){print $i}}'`
echo ${app_in_conf[*]}
app_excls=`sed -n "$conf_start,/\[/p" backs.conf | sed -n '/\[/!p' | grep "all_excl" | awk -F'\=' '{print $2}' | awk -F'
:' '{for(i=1;i<=NF;i++){print $i}}'`
join_array=()
excl_join_array=()
cd $app_parent_dir
echo "+++++++++++++++++++ 主 机:${1} ,备 份 开 始:`date '+%Y%m%d %H:%M:%S'`+++++++++++++++++++" >> backupLog_${back_d
ate}.log
for app in ${app_in_conf}; do
        echo "`date '+%Y%m%d %H:%M:%S'` 应 用:${app} ,备 份 开 始" >> backupLog_${back_date}.log
        for excl in ${app_excls}; do
                if grep -q "$app" <<< $excl;then
                        join_array[${#join_array[*]}]="--exclude=${excl}"
                fi
        done
        echo "join_arrays are: ${join_array[*]} , and size is :${#join_array[*]}"
        if test ${#join_array[*]} -eq 0;then
                tar -cvzf ${app}_bak${back_date}.tar.gz ./$app
                wait
                echo "`date '+%Y%m%d %H:%M:%S'` ${app}备份完成,备份文件名称:${app}_bak${back_date}.tar.gz,无排除目录<
<<<<<<<<" >> backupLog_${back_date}.log
        else
                echo "${basic_command}" ${app}_bak${back_date}.tar.gz ./$app ${join_array[*]}
                tar -cvzf ${app}_bak${back_date}.tar.gz ./$app ${join_array[*]}
                #echo "${basic_command}" ${app}_bak${back_date}.tar.gz ./$app ${join_array[*]}
                wait
                unset join_array
                echo "`date '+%Y%m%d %H:%M:%S'`  ${app}备份完成,备份文件名称:${app}_bak${back_date}.tar.gz,存在排除目
录,见配置文件<<<<<<<<<" >> backupLog_${back_date}.log
        fi
done
echo "++++++++++++++++ 主 机:${1} ,应 用 ${app_in_conf[*]},所 有 应 用 备 份 完 成:`date '+%Y%m%d %H:%M:%S'` +++++++
+++++++++" >> backupLog_${back_date}.log

对应的配置文件样例:
[]之间填写主机IP;
par_dir:对应应用所在的同级目录
all_apps:对应的应用名称,多个应用使用英文的 :分开,注意应用名称不要带路径信息
all_excl:所有的需要排除(不需要备份的目录或文件),多个路径使用英文的 :分开,使用相对路径即可

[10.242.92.6]
par_dir=/your/backPath/
all_apps=yourapp_1:your_app2
all_excl=./your_app1/logs:./your_app2/logs

将以上脚本和配置文件部署在要备份的主机的对应目录下,备份命令:

sh daily_backup.sh 主机IP

该项目已经托管到gitee,以后会在gitee上不定期更新,需要的可以访问gitee仓库:

https://gitee.com/charlie2cindy/daily_backups
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值