AWS Linux t2.micro实例yum锁报错无法执行yum操作如何解决?
AWS Linux t2.micro实例yum锁报错解决方案
报错信息
Another app is currently holding the yum lock; waiting for it to exit... The other application is: yum Memory : 35 M RSS (335 MB VSZ) Started: Wed Oct 20 11:56:55 2021 - 03:27 ago State : Sleeping, pid: 3162
根因说明
该问题由AWS Linux默认镜像自带的自动更新机制和自定义引导脚本的yum操作抢占资源锁导致,即使重建实例也会复现,涉及两个默认触发的yum进程:
- 实例初始化阶段cloud-init默认开启的
package_update/package_upgrade模块,会在开机后第一时间执行yum更新 - 系统预装的
yum-cron服务,开机后会自动启动执行后台定期更新任务
临时修复(单实例应急)
按顺序执行以下命令即可解除锁定:
- 停止yum自动更新服务,避免进程反复拉起
systemctl stop yum-cron - 终止所有运行中的yum进程
ps aux | grep yum | grep -v grep | awk '{print $2}' | xargs kill -9 2>/dev/null - 清理所有残留的yum、rpm锁文件
rm -f /var/run/yum.pid /var/lib/rpm/.rpm.lock /var/lib/yum/yum.pid - 若之前异常中断yum操作导致rpm数据库损坏,执行修复命令
rpm --rebuilddb - 验证yum功能恢复正常
yum list
永久适配(批量启动场景)
修改EC2实例的启动脚本(User Data),从源头避免锁冲突:
方案1:引导脚本增加等待逻辑
在你原有安装apache的脚本最开头新增以下代码,等待系统自带yum任务执行完成后再运行自定义操作:
# 暂停yum自动更新服务 systemctl stop yum-cron # 最多等待180秒让已启动的yum进程执行完毕 wait_count=0 while pgrep yum > /dev/null && [ ${wait_count} -lt 180 ] do sleep 1 wait_count=$((wait_count+1)) done # 清理残留锁文件 rm -f /var/run/yum.pid /var/lib/rpm/.rpm.lock /var/lib/yum/yum.pid # 此处添加你原有yum安装逻辑,例如: # yum install httpd -y # systemctl start httpd
方案2:禁用系统默认自动更新
如果不需要默认系统更新功能,在User Data最开头添加cloud-init配置直接关闭自动更新:
#cloud-config package_update: false package_upgrade: false runcmd: - systemctl stop yum-cron - systemctl disable yum-cron # 后续添加你的自定义安装逻辑
内容的提问来源于stack exchange,提问作者David S
相关产品推荐
相关产品推荐

