在当今数字化时代,运维工作的重要性日益凸显。面对复杂多变的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"
脚本定义
- 变量设置
RsyncCommand
: 定义了rsync
命令的基本参数,包括递归复制、保持文件属性、实时进度显示、限速等。DIR
:指定本地YUM数据存储根目录。LogDir
:日志目录。- 各种
Centos*
变量:分别指定了CentOS 6和7不同版本(Base、Epel、Salt、Update、Docker、Mysql)的x86_64架构仓库在本地的存放路径。 MirrorDomain
:指定源YUM仓库的rsync镜像域名。
- 辅助函数
check_dir()
: 检查并创建指定的目录(传入多个参数)。check_rsync_status()
: 根据rsync
命令执行后的返回值($?
)判断同步是否成功,将结果写入指定的日志文件。
脚本执行流程
- 初始化目录结构
- 调用
check_dir
函数,检查并创建所有需要的本地仓库目录及日志目录。
- 同步CentOS 6和7的Base仓库
- 使用
$RsyncCommand
分别同步源仓库中CentOS 6和7的x86_64架构Base仓库到对应的本地路径。 - 将同步过程中产生的输出重定向至相应的日志文件(如
centos6Base.log
、centos7Base.log
)。 - 调用
check_rsync_status
记录同步状态。
- 同步Epel仓库
- 同理,同步CentOS 6和7的x86_64架构Epel仓库到本地,并记录同步状态。
- 同步SaltStack仓库
- 同步CentOS 7的x86_64架构SaltStack仓库到本地(注:CentOS 6部分被注释掉了,若需要同步可取消注释)。
- 在同步后,为SaltStack仓库创建一个名为
latest
的符号链接,指向最新版本的archive目录。 - 记录同步状态。
- 同步Docker仓库
- 同步CentOS 7的x86_64架构Docker仓库到本地(注:CentOS 6部分被注释掉了,若需要同步可取消注释)。
- 记录同步状态。
- 同步CentOS Update仓库
- 同步CentOS 7的x86_64架构Update仓库到本地(注:CentOS 6部分被注释掉了,若需要同步可取消注释)。
- 记录同步状态。
- 同步MySQL 5.7和8.0仓库
- 同步CentOS 7的x86_64架构MySQL 5.7和8.0仓库到本地(注:CentOS 6部分被注释掉了,若需要同步可取消注释)。
- 记录同步状态。
使用方法
- 准备环境
- 确保系统已安装
rsync
和nginx
。 - 创建或指定一个用于存放YUM仓库数据的本地目录(如
/app/yumData
)。
- 修改脚本
- 如果源YUM仓库地址(
MirrorDomain
)不可用或需要更换,替换为可用的rsync镜像地址。
- 执行脚本
- 使用具有相应权限的用户(如root)运行该脚本。
- 配置Nginx
- 在Nginx的配置文件中,为每个同步到本地的YUM仓库创建一个HTTP服务器块(server),指定其根目录为对应的本地仓库路径。
- 重启Nginx服务以应用配置更改。
- 使用本地YUM站点
- 在需要使用这些仓库的客户端系统上,编辑
/etc/yum.repos.d/
下的相应repo文件,将baseurl
指向搭建好的HTTP YUM站点地址。
通过该脚本成功地在本地通过rsync同步了多个YUM仓库,并通过Nginx搭建了HTTP YUM站点供客户端系统使用。如果您发现某些仓库同步失败,请检查日志文件以确定问题所在,并根据实际情况调整脚本或源仓库地址。
如果想上手操作练代码的同学们可以通过阿里云ecs服务器免费试用参与!
入口:新老同学免费试用