如何通过Yum确保系统更新过程中不出现中断,流畅完成更新?

更新于
2026-08-10 17:40:03
4阅读来源:SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

一、确认 Yum 本身健康

痛点:Yum 版本过旧导致兼容性问题、性能下降,甚至出现崩溃。

至于查看当前版本,

如何通过Yum确保系统更新过程中不出现中断,流畅完成更新?
yum --version

如果版本低于程序推荐的当前版本。建议先升级:

sudo yum install yum-utils
sudo yum update yum

二、网络与仓库的可靠性检查

痛点:网络不稳或仓库不可达导致下载中断、事务锁定。

  • 使用 pingcurl -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>

  • Add to crontab for nightly updates:
  • 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` 查看依赖树;必要时先手动移除冲突包,
  • 从重复包来看,清理重复版本后再继续更新。
  • 如何通过Yum确保系统更新过程中不出现中断,流畅完成更新?
    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>

    十、常用方法小结

    使用镜像站+重试+超时设置 timeout=60。retries=10 
    场景   推荐措施   操作要点  
    生产环境主要服务 谨慎升级 排除内核&主要组件 → 在测试环境预演 → 使用事务回滚 
    开发/测试环境 全量升级 每日一次自动化任务 → 完整日志 + 邮件告警 
    网络不稳定地区 

    :  ‑预防‑清理‑回滚‑通知”五步法,你可以把 Yum 更新过程中的“卡死”“中断”“重复包”等痛点彻底根除,让程序始终保持在最新且稳定的状态。

    .

标签:Linux

一、确认 Yum 本身健康

痛点:Yum 版本过旧导致兼容性问题、性能下降,甚至出现崩溃。

至于查看当前版本,

如何通过Yum确保系统更新过程中不出现中断,流畅完成更新?
yum --version

如果版本低于程序推荐的当前版本。建议先升级:

sudo yum install yum-utils
sudo yum update yum

二、网络与仓库的可靠性检查

痛点:网络不稳或仓库不可达导致下载中断、事务锁定。

  • 使用 pingcurl -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>

  • Add to crontab for nightly updates:
  • 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` 查看依赖树;必要时先手动移除冲突包,
  • 从重复包来看,清理重复版本后再继续更新。
  • 如何通过Yum确保系统更新过程中不出现中断,流畅完成更新?
    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>

    十、常用方法小结

    使用镜像站+重试+超时设置 timeout=60。retries=10 
    场景   推荐措施   操作要点  
    生产环境主要服务 谨慎升级 排除内核&主要组件 → 在测试环境预演 → 使用事务回滚 
    开发/测试环境 全量升级 每日一次自动化任务 → 完整日志 + 邮件告警 
    网络不稳定地区 

    :  ‑预防‑清理‑回滚‑通知”五步法,你可以把 Yum 更新过程中的“卡死”“中断”“重复包”等痛点彻底根除,让程序始终保持在最新且稳定的状态。

    .

标签:Linux