每天解析一个脚本(一)

简介: 【4月更文挑战第14天】shell脚本解析及训练(一)

在当今数字化时代,运维工作的重要性日益凸显。面对复杂多变的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||mkdirpDST_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

脚本实现过程:

  1. 定义变量:
  • SRC_PATH:SVN仓库源路径(默认为"/opt/svndata")。
  • DST_PATH:备份文件存放的目标路径(默认为"/data/svnbackup")。
  • LOG_FILE:备份日志文件路径。
  • SVN_BACKUP_C:SVN hotcopy备份命令。
  • SVN_LOOK_C:获取SVN仓库最新修订版号的命令。
  • TODAY:当前日期,格式为“年-月-日”。
  1. 创建必要的目录结构:
  • 在目标路径下创建备份主目录(如果不存在的话)。
  • 在备份主目录下创建logs子目录和以当前日期命名的子目录,用于存放当日备份文件。
  1. 查找并备份所有SVN仓库:
  • 使用find命令在源路径下查找除"httpd"和"bak"以外的所有子目录(即SVN仓库)。
  • 对每个找到的仓库执行svnadmin hotcopy命令,将其完整备份到目标路径下对应日期的子目录中。
  1. 检查备份状态并记录日志:
  • 使用svnlook youngest命令检查备份后的仓库是否包含最新修订版。
  • 如果备份成功,将备份成功的消息(包括日期和仓库名)追加到备份日志文件中;否则,记录备份失败的消息。
  1. 备份用户密码文件和权限文件:
  • 将源路径下的"authz"和"access.conf"两个文件复制到目标路径下对应日期的子目录中。
  1. 重命名日志文件:
  • 将当前日志文件名后缀加上当前日期,便于区分不同日期的日志。
  1. 清理过期备份:
  • 计算7天前的日期(seven_days_ago)。
  • 删除目标路径下该日期对应的备份子目录及其内容。

如何使用:

  1. 修改配置:
  • 根据实际情况,调整SRC_PATHDST_PATH变量,确保它们分别指向实际的SVN仓库源路径和期望的备份目标路径。
  1. 添加到crontab:
  • 打开终端,输入crontab -e打开定时任务编辑器。
  • 在编辑器中,按照上述示例格式添加一行,指定脚本的完整路径和执行时间。
  • 保存并退出编辑器。

脚本将按照设定的时间自动执行,对SVN仓库进行完整备份,并保留最近7天的备份。备份状态和相关信息会记录在指定的日志文件中。同时,系统会自动删除超过保留期限(7天)的旧备份。

如果想上手操作练代码的同学们可以通过阿里云ecs服务器免费试用参与!

入口:新老同学免费试用

目录
相关文章
|
4天前
|
弹性计算 运维 监控
每天解析一个脚本(53)
【4月更文挑战第26天】shell脚本解析及训练(53)
19 5
|
5天前
|
弹性计算 运维 监控
每天解析一个脚本(41)
【4月更文挑战第25天】shell脚本解析及训练(41)
9 0
|
5天前
|
弹性计算 运维 Shell
每天解析一个脚本(38)
【4月更文挑战第25天】shell脚本解析及训练(38)
10 1
|
8天前
|
存储 弹性计算 运维
每天解析一个脚本(25)
【4月更文挑战第22天】shell脚本解析及训练(25)
27 0
|
8天前
|
存储 运维 监控
每天解析一个脚本(15)
【4月更文挑战第19天】shell脚本解析及训练(15)
68 1
|
6天前
|
存储 运维 监控
每天解析一个脚本(32)
【4月更文挑战第24天】shell脚本解析及训练(32)
7 2
|
6天前
|
运维 监控 Shell
每天解析一个脚本(36)
【4月更文挑战第24天】shell脚本解析及训练(36)
10 0
|
6天前
|
存储 运维 网络协议
每天解析一个脚本(34)
【4月更文挑战第24天】shell脚本解析及训练(34)
12 1
|
6天前
|
JSON 运维 机器人
每天解析一个脚本(35)
【4月更文挑战第24天】shell脚本解析及训练(35)
6 1
|
8天前
|
存储 弹性计算 算法
每天解析一个脚本(29)
【4月更文挑战第22天】shell脚本解析及训练(29)
22 0

热门文章

最新文章