每天解析一个脚本(三)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【4月更文挑战第14天】shell脚本解析及训练(三)

在当今数字化时代,运维工作的重要性日益凸显。面对复杂多变的IT环境,高效的自动化工具和脚本成为每一位运维人员提升工作效率、保障系统稳定的关键利器。为了助力广大运维同行在日常工作中更加得心应手,我特此精心整理了一份实用的Shell脚本合集,旨在为大家提供一份“运维人的福利”,以期在繁琐的任务处理与系统管理中,助您一臂之力。

这份脚本集合凝聚了我个人在实际运维工作中积累的经验与智慧,涵盖了诸如服务器监控、故障排查、备份恢复、性能调优、自动化部署等诸多核心场景。每一行代码都经过实战打磨,力求简洁高效,易读易用,旨在适应各种复杂的运维环境,满足不同层次运维需求。无论您是初入运维领域的新人,还是经验丰富的资深专家,都能从中找到适合自己的工具,让繁杂的运维工作化繁为简,事半功倍。

在这里,我诚挚地邀请各位运维同仁随意拿取、自由分享这份Shell脚本资源。它们不仅是您日常工作的得力助手,更是交流学习、提升技能的良好素材。让我们共同携手,借助科技的力量,驱动运维工作的智能化、自动化进程,为构建稳定、高效的信息系统保驾护航。

今天我们要分析的是:

构建本地YUM通过 rsync 的方式同步 yum,通过 nginx 只做 http yum 站点;但是 centos6 的镜像最近都不能用了,国内貌似都禁用了,如果找到合适的自行更换地址。

#!/bin/bash

# 更新yum镜像

RsyncCommand="rsync -rvutH -P --delete --delete-after --delay-updates --

bwlimit=1000"

DIR="/app/yumData"

LogDir="$DIR/logs"

Centos6Base="$DIR/Centos6/x86_64/Base"

Centos7Base="$DIR/Centos7/x86_64/Base"

Centos6Epel="$DIR/Centos6/x86_64/Epel"

Centos7Epel="$DIR/Centos7/x86_64/Epel"

Centos6Salt="$DIR/Centos6/x86_64/Salt"

Centos7Salt="$DIR/Centos7/x86_64/Salt"

Centos6Update="$DIR/Centos6/x86_64/Update"

Centos7Update="$DIR/Centos7/x86_64/Update"

Centos6Docker="$DIR/Centos6/x86_64/Docker"

Centos7Docker="$DIR/Centos7/x86_64/Docker"

Centos6Mysql5_7="$DIR/Centos6/x86_64/Mysql/Mysql5.7"

Centos7Mysql5_7="$DIR/Centos7/x86_64/Mysql/Mysql5.7"

Centos6Mysql8_0="$DIR/Centos6/x86_64/Mysql/Mysql8.0"

Centos7Mysql8_0="$DIR/Centos7/x86_64/Mysql/Mysql8.0"

MirrorDomain="rsync://rsync.mirrors.ustc.edu.cn"

# 目录不存在就创建

check_dir(){

for dir in $*

do

test -d dir||mkdir−pdir || mkdir -p dir

done

}

# 检查rsync同步结果

check_rsync_status(){

if [ $? -eq 0 ];then

echo "rsync success" >> $1

else

echo "rsync fail" >> $1

fi

}

check_dir DIRDIR LogDir Centos6BaseCentos6Base Centos7Base Centos6EpelCentos6Epel Centos7Epel

Centos6SaltCentos6Salt Centos7Salt Centos6UpdateCentos6Update Centos7Update $Centos6Docker

Centos7DockerCentos7Docker Centos6Mysql5_7 Centos7Mysql57Centos7Mysql5_7 Centos6Mysql8_0

$Centos7Mysql8_0

# Base yumrepo

#RsyncCommand"RsyncCommand "MirrorDomain"/repo/centos/6/os/x86_64/ $Centos6Base >>

"$LogDir/centos6Base.log" 2>&1

# check_rsync_status "$LogDir/centos6Base.log"

RsyncCommand"RsyncCommand "MirrorDomain"/repo/centos/7/os/x86_64/ $Centos7Base >>

"$LogDir/centos7Base.log" 2>&1

check_rsync_status "$LogDir/centos7Base.log"

# Epel yumrepo

# RsyncCommand"RsyncCommand "MirrorDomain"/repo/epel/6/x86_64/ $Centos6Epel >>

"$LogDir/centos6Epel.log" 2>&1

# check_rsync_status "$LogDir/centos6Epel.log"

RsyncCommand"RsyncCommand "MirrorDomain"/repo/epel/7/x86_64/ $Centos7Epel >>

"$LogDir/centos7Epel.log" 2>&1

check_rsync_status "$LogDir/centos7Epel.log"

# SaltStack yumrepo

# RsyncCommand"RsyncCommand "MirrorDomain"/repo/salt/yum/redhat/6/x86_64/ $Centos6Salt >>

"$LogDir/centos6Salt.log" 2>&1

# ln -s Centos6Salt/archive/Centos6Salt/archive/(ls $Centos6Salt/archive | tail -1)

$Centos6Salt/latest

# check_rsync_status "$LogDir/centos6Salt.log"

RsyncComman"RsyncComman "MirrorDomain"/repo/salt/yum/redhat/7/x86_64/ $Centos7Salt >>

"$LogDir/centos7Salt.log" 2>&1

check_rsync_status "$LogDir/centos7Salt.log"

# ln -s Centos7Salt/archive/Centos7Salt/archive/(ls $Centos7Salt/archive | tail -1)

$Centos7Salt/latest

# Docker yumrepo

RsyncCommand"RsyncCommand "MirrorDomain"/repo/docker-ce/linux/centos/7/x86_64/stable/

Centos7Docker>>"Centos7Docker >> "LogDir/centos7Docker.log" 2>&1

check_rsync_status "$LogDir/centos7Docker.log"

# centos update yumrepo

# RsyncCommand"RsyncCommand "MirrorDomain"/repo/centos/6/updates/x86_64/ $Centos6Update >>

"$LogDir/centos6Update.log" 2>&1

# check_rsync_status "$LogDir/centos6Update.log"

RsyncCommand"RsyncCommand "MirrorDomain"/repo/centos/7/updates/x86_64/ $Centos7Update >>

"$LogDir/centos7Update.log" 2>&1

check_rsync_status "$LogDir/centos7Update.log"

# mysql 5.7 yumrepo

# RsyncCommand"RsyncCommand "MirrorDomain"/repo/mysql-repo/yum/mysql-5.7-

community/el/6/x86_64/ "Centos6Mysql57">>"Centos6Mysql5_7" >> "LogDir/centos6Mysql5.7.log" 2>&1

# check_rsync_status "$LogDir/centos6Mysql5.7.log"

RsyncCommand"RsyncCommand "MirrorDomain"/repo/mysql-repo/yum/mysql-5.7-

community/el/7/x86_64/ "Centos7Mysql57">>"Centos7Mysql5_7" >> "LogDir/centos7Mysql5.7.log" 2>&1

check_rsync_status "$LogDir/centos7Mysql5.7.log"

# mysql 8.0 yumrepo

# RsyncCommand"RsyncCommand "MirrorDomain"/repo/mysql-repo/yum/mysql-8.0-

community/el/6/x86_64/ "Centos6Mysql80">>"Centos6Mysql8_0" >> "LogDir/centos6Mysql8.0.log" 2>&1

# check_rsync_status "$LogDir/centos6Mysql8.0.log"

RsyncCommand"RsyncCommand "MirrorDomain"/repo/mysql-repo/yum/mysql-8.0-

community/el/7/x86_64/ "Centos7Mysql80">>"Centos7Mysql8_0" >> "LogDir/centos7Mysql8.0.log" 2>&1

check_rsync_status "$LogDir/centos7Mysql8.0.log"

脚本定义

  1. 变量设置
  • RsyncCommand: 定义了rsync命令的基本参数,包括递归复制、保持文件属性、实时进度显示、限速等。
  • DIR:指定本地YUM数据存储根目录。
  • LogDir:日志目录。
  • 各种Centos*变量:分别指定了CentOS 6和7不同版本(Base、Epel、Salt、Update、Docker、Mysql)的x86_64架构仓库在本地的存放路径。
  • MirrorDomain:指定源YUM仓库的rsync镜像域名。
  1. 辅助函数
  • check_dir(): 检查并创建指定的目录(传入多个参数)。
  • check_rsync_status(): 根据rsync命令执行后的返回值($?)判断同步是否成功,将结果写入指定的日志文件。

脚本执行流程

  1. 初始化目录结构
  • 调用check_dir函数,检查并创建所有需要的本地仓库目录及日志目录。
  1. 同步CentOS 6和7的Base仓库
  • 使用$RsyncCommand分别同步源仓库中CentOS 6和7的x86_64架构Base仓库到对应的本地路径。
  • 将同步过程中产生的输出重定向至相应的日志文件(如centos6Base.logcentos7Base.log)。
  • 调用check_rsync_status记录同步状态。
  1. 同步Epel仓库
  • 同理,同步CentOS 6和7的x86_64架构Epel仓库到本地,并记录同步状态。
  1. 同步SaltStack仓库
  • 同步CentOS 7的x86_64架构SaltStack仓库到本地(注:CentOS 6部分被注释掉了,若需要同步可取消注释)。
  • 在同步后,为SaltStack仓库创建一个名为latest的符号链接,指向最新版本的archive目录。
  • 记录同步状态。
  1. 同步Docker仓库
  • 同步CentOS 7的x86_64架构Docker仓库到本地(注:CentOS 6部分被注释掉了,若需要同步可取消注释)。
  • 记录同步状态。
  1. 同步CentOS Update仓库
  • 同步CentOS 7的x86_64架构Update仓库到本地(注:CentOS 6部分被注释掉了,若需要同步可取消注释)。
  • 记录同步状态。
  1. 同步MySQL 5.7和8.0仓库
  • 同步CentOS 7的x86_64架构MySQL 5.7和8.0仓库到本地(注:CentOS 6部分被注释掉了,若需要同步可取消注释)。
  • 记录同步状态。

使用方法

  1. 准备环境
  • 确保系统已安装rsyncnginx
  • 创建或指定一个用于存放YUM仓库数据的本地目录(如/app/yumData)。
  1. 修改脚本
  • 如果源YUM仓库地址(MirrorDomain)不可用或需要更换,替换为可用的rsync镜像地址。
  1. 执行脚本
  • 使用具有相应权限的用户(如root)运行该脚本。
  1. 配置Nginx
  • 在Nginx的配置文件中,为每个同步到本地的YUM仓库创建一个HTTP服务器块(server),指定其根目录为对应的本地仓库路径。
  • 重启Nginx服务以应用配置更改。
  1. 使用本地YUM站点
  • 在需要使用这些仓库的客户端系统上,编辑/etc/yum.repos.d/下的相应repo文件,将baseurl指向搭建好的HTTP YUM站点地址。

通过该脚本成功地在本地通过rsync同步了多个YUM仓库,并通过Nginx搭建了HTTP YUM站点供客户端系统使用。如果您发现某些仓库同步失败,请检查日志文件以确定问题所在,并根据实际情况调整脚本或源仓库地址。

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

入口:新老同学免费试用

目录
相关文章
|
11天前
|
存储 运维 监控
每天解析一个脚本(37)
【4月更文挑战第25天】shell脚本解析及训练(37)
21 1
|
11天前
|
存储 弹性计算 运维
每天解析一个脚本(17)
【4月更文挑战第21天】shell脚本解析及训练(17)
21 1
|
11天前
|
弹性计算 运维 监控
每天解析一个脚本(47)
【4月更文挑战第26天】shell脚本解析及训练(47)
24 1
|
11天前
|
弹性计算 运维 监控
每天解析一个脚本(50)
【4月更文挑战第26天】shell脚本解析及训练(50)
25 3
|
11天前
|
弹性计算 运维 搜索推荐
每天解析一个脚本(46)
【4月更文挑战第25天】shell脚本解析及训练(46)
17 1
|
11天前
|
弹性计算 运维 监控
每天解析一个脚本(52)
【4月更文挑战第26天】shell脚本解析及训练(52)
31 3
|
11天前
|
运维 监控 Shell
每天解析一个脚本(44)
【4月更文挑战第25天】shell脚本解析及训练(44)
11 0
|
11天前
|
弹性计算 运维 监控
每天解析一个脚本(43)
【4月更文挑战第25天】shell脚本解析及训练(43)
11 0
|
11天前
|
存储 运维 监控
每天解析一个脚本(32)
【4月更文挑战第24天】shell脚本解析及训练(32)
11 2
|
11天前
|
存储 弹性计算 运维
每天解析一个脚本(31)
【4月更文挑战第23天】shell脚本解析及训练(31)
26 3