在当今数字化时代,运维工作的重要性日益凸显。面对复杂多变的IT环境,高效的自动化工具和脚本成为每一位运维人员提升工作效率、保障系统稳定的关键利器。为了助力广大运维同行在日常工作中更加得心应手,我特此精心整理了一份实用的Shell脚本合集,旨在为大家提供一份“运维人的福利”,以期在繁琐的任务处理与系统管理中,助您一臂之力。
这份脚本集合凝聚了我个人在实际运维工作中积累的经验与智慧,涵盖了诸如服务器监控、故障排查、备份恢复、性能调优、自动化部署等诸多核心场景。每一行代码都经过实战打磨,力求简洁高效,易读易用,旨在适应各种复杂的运维环境,满足不同层次运维需求。无论您是初入运维领域的新人,还是经验丰富的资深专家,都能从中找到适合自己的工具,让繁杂的运维工作化繁为简,事半功倍。
在这里,我诚挚地邀请各位运维同仁随意拿取、自由分享这份Shell脚本资源。它们不仅是您日常工作的得力助手,更是交流学习、提升技能的良好素材。让我们共同携手,借助科技的力量,驱动运维工作的智能化、自动化进程,为构建稳定、高效的信息系统保驾护航。
今天我们要分析的是:
SVN 完整备份通过 hotcopy 进行 SVN 完整备份,备份保留 7 天
#!/bin/bash
# Filename : svn_backup_repos.sh
# Date : 2020/12/14
# Author : JakeTian
# Email : JakeTian@***.com
# Crontab : 59 23 * * * /bin/bash $BASE_PATH/svn_backup_repos.sh >/dev/null
2>&1
# Notes : 将脚本加入crontab中,每天定时执行
# Description: SVN完全备份
set -e
SRC_PATH="/opt/svndata"
DST_PATH="/data/svnbackup"
LOG_FILE="$DST_PATH/logs/svn_backup.log"
SVN_BACKUP_C="/bin/svnadmin hotcopy"
SVN_LOOK_C="/bin/svnlook youngest"
TODAY=$(date +'%F')
cd $SRC_PATH
ALL_REPOS=$(find ./ -maxdepth 1 -type d ! -name 'httpd' -a ! -name 'bak' | tr -d
'./')
# 创建备份目录,备份脚本日志目录
test -d DSTPATH||mkdir−pDST_PATH || mkdir -p DST_PATH
test -d DSTPATH/logs||mkdirDST_PATH/logs || mkdir DST_PATH/logs
test -d DSTPATH/DST_PATH/TODAY || mkdir DSTPATH/DST_PATH/TODAY
# 备份repos文件
for repo in $ALL_REPOS
do
SVNBACKUPCSVN_BACKUP_C SRC_PATH/reporepo DST_PATH/TODAY/TODAY/repo
# 判断备份是否完成
if SVNLOOKCSVN_LOOK_C DST_PATH/TODAY/TODAY/repo;then
echo "TODAY:TODAY: repo Backup Success" >> $LOG_FILE
else
echo "TODAY:TODAY: repo Backup Fail" >> $LOG_FILE
fi
done
# # 备份用户密码文件和权限文件
cp -p authz access.conf DSTPATH/DST_PATH/TODAY
# 日志文件转储
mv LOGFILELOG_FILE LOG_FILE-$TODAY
# 删除七天前的备份
seven_days_ago=$(date -d "7 days ago" +'%F')
rm -rf DSTPATH/DST_PATH/seven_days_ago
脚本实现过程:
- 定义变量:
SRC_PATH
:SVN仓库源路径(默认为"/opt/svndata")。DST_PATH
:备份文件存放的目标路径(默认为"/data/svnbackup")。LOG_FILE
:备份日志文件路径。SVN_BACKUP_C
:SVN hotcopy备份命令。SVN_LOOK_C
:获取SVN仓库最新修订版号的命令。TODAY
:当前日期,格式为“年-月-日”。
- 创建必要的目录结构:
- 在目标路径下创建备份主目录(如果不存在的话)。
- 在备份主目录下创建logs子目录和以当前日期命名的子目录,用于存放当日备份文件。
- 查找并备份所有SVN仓库:
- 使用
find
命令在源路径下查找除"httpd"和"bak"以外的所有子目录(即SVN仓库)。 - 对每个找到的仓库执行
svnadmin hotcopy
命令,将其完整备份到目标路径下对应日期的子目录中。
- 检查备份状态并记录日志:
- 使用
svnlook youngest
命令检查备份后的仓库是否包含最新修订版。 - 如果备份成功,将备份成功的消息(包括日期和仓库名)追加到备份日志文件中;否则,记录备份失败的消息。
- 备份用户密码文件和权限文件:
- 将源路径下的"authz"和"access.conf"两个文件复制到目标路径下对应日期的子目录中。
- 重命名日志文件:
- 将当前日志文件名后缀加上当前日期,便于区分不同日期的日志。
- 清理过期备份:
- 计算7天前的日期(
seven_days_ago
)。 - 删除目标路径下该日期对应的备份子目录及其内容。
如何使用:
- 修改配置:
- 根据实际情况,调整
SRC_PATH
和DST_PATH
变量,确保它们分别指向实际的SVN仓库源路径和期望的备份目标路径。
- 添加到crontab:
- 打开终端,输入
crontab -e
打开定时任务编辑器。 - 在编辑器中,按照上述示例格式添加一行,指定脚本的完整路径和执行时间。
- 保存并退出编辑器。
脚本将按照设定的时间自动执行,对SVN仓库进行完整备份,并保留最近7天的备份。备份状态和相关信息会记录在指定的日志文件中。同时,系统会自动删除超过保留期限(7天)的旧备份。
如果想上手操作练代码的同学们可以通过阿里云ecs服务器免费试用参与!
入口:新老同学免费试用