如何通过Yum确保系统更新过程中不出现中断,流畅完成更新?
- 内容介绍
- 文章标签
- 相关推荐
一、确认 Yum 本身健康
痛点:Yum 版本过旧导致兼容性问题、性能下降,甚至出现崩溃。
至于查看当前版本,
yum --version
如果版本低于程序推荐的当前版本。建议先升级:
sudo yum install yum-utils
sudo yum update yum
二、网络与仓库的可靠性检查
痛点:网络不稳或仓库不可达导致下载中断、事务锁定。
-
使用
ping或curl -I $repo_url验证仓库 URL 可达。 -
确保 DNS 正常,
/etc/resolv.conf中有可靠的解析服务器。 - 在防火墙或代理环境下打开对应的 HTTP/HTTPS 端口。
1)设置下载超时与重试次数
# /etc/yum.conf
timeout=30
retries=5
2)使用可靠的镜像源
# /etc/yum.repos.d/CentOS-Base.repo
name=CentOS-$releasever - Base - aliyun
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
三、预防事务中断的关键配置
痛点:手动 Ctrl+C、网络掉线或进程被杀导致未完成事务,后续 Yum 被锁定。
1)禁用交互式中断提示
# /etc/yum.conf
assumeyes=1 # 自动确认所有提示
skip-broken=true # 遇到依赖冲突时跳过而不中止整个事务
2)开启事务自动恢复
# 安装工具
sudo yum install yum-utils
# 当发现未完成事务时执行:
sudo yum-complete-transaction --cleanup-only
3)自定义前置检查脚本
# /usr/local/bin/pre-update-check.sh
#!/bin/bash
# 检查硬盘空间
if ];n
echo "错误:/var 分区剩余空间不足10%,请清理后再更新。"
exit 1
fi
# 检查内存负载
if ];n
echo "警告:程序负载较高,建议在空闲时段执行更新。"
exit 0 # 警告但不阻止更新
fi
exit 0
在 /etc/yum.conf 中加入:
# 在每次更新前调用脚本 pluginpath=/usr/lib64/python*/site-packages/yum-plugins/ plugins=1 pluginconfpath=/etc/yum/pluginconf.d/ posttrans_hook=/usr/local/bin/pre-update-check.sh
四、关键包的安全排除策略
痛点:内核或主要组件更新后导致服务意外重启或不可用。
# /etc/yum.conf 或对应 repo 文件中添加:
exclude=kernel* centos-release*
# 如需单独排除某个软件包。可使用:
exclude=package-name*
五、程序资源与空间检查
-
硬盘空间:
df -h /var /boot -
内存 & CPU:
free -m && uptime -
I/O 性能:
-
SElinux 状态:
sestatus -
NTP 同步:
timedatectl status
六、更新前的备份与回滚准备
痛点:DOS 攻击或误操作导致关键配置丢失,缺少回滚手段。
a)程序关键目录备份
# 创建快照
lvcreate --size 5G --snapshot --name root_snap /dev/vg0/root
# 或者使用 rsync 简单备份关键配置文件夹:
mkdir -p /backup/etc_before_update_$
rsync -aAXv /etc/ /backup/etc_before_update_$/
b)利用 yum 的历史功能进行回滚
# 查看最近的事务 ID: yum history list # 回滚特定事务: yum history undo
七、流畅执行程序更新的完整流程
a)清理旧缓存、防止元数据冲突
# 清理所有缓存和临时文件: yum clean all # 重建缓存以确保元数据最新: yum makecache fast
b)执行安全/全量更新
-
If you only need security patches:
# 安全更新 yum update --security -
If you want a full system upgrade:
# 全量升级 yum update -y
d)实时监控输出并记录日志
# 将日志写入文件便于事后分析: yum update -y | tee /var/log/yum_update_$.log d)完成后验证关键服务状态
# 示例:检查 httpd 与 mysqld 是否正常运行 systemctl is-active httpd && systemctl is-active mysqld 八、邮件/短信通知
Pain point: 无法第一时间获悉更新成功或失败导致延误处理。
- Create a simple wrapper script:
# /usr/local/bin/yum-notify.sh #!/bin/bash LOGFILE="/var/log/yum_update_$.log" /usr/bin/yum "$@" | tee "$LOGFILE" STATUS=${PIPESTATUS} if;n SUBJECT="✅ Yum 更新成功 $" else SUBJECT="❌ Yum 更新失败 $" fi mailx -s "$SUBJECT" <"$LOGFILE" pre> c od e>
0 4 * * * root /usr/local/bin/yum-notify.sh update -y>/dev/null 2>&1 pre> cod e>
九、常见故障排查教程
Pain point:Yum 卡住、报错“Anor app is currently holding yum lock” 或 “Failed download”。
- 说到锁文件残留,删除锁文件并重新启动 d b u s y n t h。
rm -f /var/run/yum.pid /var/run/rhn_plugin.pid sudo systemctl restart dbus pre> cod e>
yum deplist package-name` 查看依赖树;必要时先手动移除冲突包,
package-cleanup --oldkernels --count=2 # 保留最近两个内核 package-cleanup --dupes # 列出重复包 yum remove $ # 删除重复包 pre> cod e>
yum update --debuglevel=10 # 输出更细粒度日志 tail -f /var/log/yum.log # 实时看日志 pre>/ c od e>
十、常用方法小结
| 场景 | 推荐措施 | 操作要点 |
|---|---|---|
| 生产环境主要服务 | 谨慎升级 | 排除内核&主要组件 → 在测试环境预演 → 使用事务回滚 |
| 开发/测试环境 | 全量升级 | 每日一次自动化任务 → 完整日志 + 邮件告警 |
| 网络不稳定地区 |
: ‑预防‑清理‑回滚‑通知”五步法,你可以把 Yum 更新过程中的“卡死”“中断”“重复包”等痛点彻底根除,让程序始终保持在最新且稳定的状态。
.
一、确认 Yum 本身健康
痛点:Yum 版本过旧导致兼容性问题、性能下降,甚至出现崩溃。
至于查看当前版本,
yum --version
如果版本低于程序推荐的当前版本。建议先升级:
sudo yum install yum-utils
sudo yum update yum
二、网络与仓库的可靠性检查
痛点:网络不稳或仓库不可达导致下载中断、事务锁定。
-
使用
ping或curl -I $repo_url验证仓库 URL 可达。 -
确保 DNS 正常,
/etc/resolv.conf中有可靠的解析服务器。 - 在防火墙或代理环境下打开对应的 HTTP/HTTPS 端口。
1)设置下载超时与重试次数
# /etc/yum.conf
timeout=30
retries=5
2)使用可靠的镜像源
# /etc/yum.repos.d/CentOS-Base.repo
name=CentOS-$releasever - Base - aliyun
baseurl=https://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
三、预防事务中断的关键配置
痛点:手动 Ctrl+C、网络掉线或进程被杀导致未完成事务,后续 Yum 被锁定。
1)禁用交互式中断提示
# /etc/yum.conf
assumeyes=1 # 自动确认所有提示
skip-broken=true # 遇到依赖冲突时跳过而不中止整个事务
2)开启事务自动恢复
# 安装工具
sudo yum install yum-utils
# 当发现未完成事务时执行:
sudo yum-complete-transaction --cleanup-only
3)自定义前置检查脚本
# /usr/local/bin/pre-update-check.sh
#!/bin/bash
# 检查硬盘空间
if ];n
echo "错误:/var 分区剩余空间不足10%,请清理后再更新。"
exit 1
fi
# 检查内存负载
if ];n
echo "警告:程序负载较高,建议在空闲时段执行更新。"
exit 0 # 警告但不阻止更新
fi
exit 0
在 /etc/yum.conf 中加入:
# 在每次更新前调用脚本 pluginpath=/usr/lib64/python*/site-packages/yum-plugins/ plugins=1 pluginconfpath=/etc/yum/pluginconf.d/ posttrans_hook=/usr/local/bin/pre-update-check.sh
四、关键包的安全排除策略
痛点:内核或主要组件更新后导致服务意外重启或不可用。
# /etc/yum.conf 或对应 repo 文件中添加:
exclude=kernel* centos-release*
# 如需单独排除某个软件包。可使用:
exclude=package-name*
五、程序资源与空间检查
-
硬盘空间:
df -h /var /boot -
内存 & CPU:
free -m && uptime -
I/O 性能:
-
SElinux 状态:
sestatus -
NTP 同步:
timedatectl status
六、更新前的备份与回滚准备
痛点:DOS 攻击或误操作导致关键配置丢失,缺少回滚手段。
a)程序关键目录备份
# 创建快照
lvcreate --size 5G --snapshot --name root_snap /dev/vg0/root
# 或者使用 rsync 简单备份关键配置文件夹:
mkdir -p /backup/etc_before_update_$
rsync -aAXv /etc/ /backup/etc_before_update_$/
b)利用 yum 的历史功能进行回滚
# 查看最近的事务 ID: yum history list # 回滚特定事务: yum history undo
七、流畅执行程序更新的完整流程
a)清理旧缓存、防止元数据冲突
# 清理所有缓存和临时文件: yum clean all # 重建缓存以确保元数据最新: yum makecache fast
b)执行安全/全量更新
-
If you only need security patches:
# 安全更新 yum update --security -
If you want a full system upgrade:
# 全量升级 yum update -y
d)实时监控输出并记录日志
# 将日志写入文件便于事后分析: yum update -y | tee /var/log/yum_update_$.log d)完成后验证关键服务状态
# 示例:检查 httpd 与 mysqld 是否正常运行 systemctl is-active httpd && systemctl is-active mysqld 八、邮件/短信通知
Pain point: 无法第一时间获悉更新成功或失败导致延误处理。
- Create a simple wrapper script:
# /usr/local/bin/yum-notify.sh #!/bin/bash LOGFILE="/var/log/yum_update_$.log" /usr/bin/yum "$@" | tee "$LOGFILE" STATUS=${PIPESTATUS} if;n SUBJECT="✅ Yum 更新成功 $" else SUBJECT="❌ Yum 更新失败 $" fi mailx -s "$SUBJECT" <"$LOGFILE" pre> c od e>
0 4 * * * root /usr/local/bin/yum-notify.sh update -y>/dev/null 2>&1 pre> cod e>
九、常见故障排查教程
Pain point:Yum 卡住、报错“Anor app is currently holding yum lock” 或 “Failed download”。
- 说到锁文件残留,删除锁文件并重新启动 d b u s y n t h。
rm -f /var/run/yum.pid /var/run/rhn_plugin.pid sudo systemctl restart dbus pre> cod e>
yum deplist package-name` 查看依赖树;必要时先手动移除冲突包,
package-cleanup --oldkernels --count=2 # 保留最近两个内核 package-cleanup --dupes # 列出重复包 yum remove $ # 删除重复包 pre> cod e>
yum update --debuglevel=10 # 输出更细粒度日志 tail -f /var/log/yum.log # 实时看日志 pre>/ c od e>
十、常用方法小结
| 场景 | 推荐措施 | 操作要点 |
|---|---|---|
| 生产环境主要服务 | 谨慎升级 | 排除内核&主要组件 → 在测试环境预演 → 使用事务回滚 |
| 开发/测试环境 | 全量升级 | 每日一次自动化任务 → 完整日志 + 邮件告警 |
| 网络不稳定地区 |
: ‑预防‑清理‑回滚‑通知”五步法,你可以把 Yum 更新过程中的“卡死”“中断”“重复包”等痛点彻底根除,让程序始终保持在最新且稳定的状态。
.

