我运行着许多 CentOS 服务器。我最近偶尔会这样做,yum update
但少数服务器上失败了。大多数情况下,我都可以通过执行以下操作来继续:
# yum clean all
# rm -f /var/lib/rpm/__db*
# rpm --rebuilddb
# yum update
但是在一台服务器上,yum clean
命令挂起了。我尝试运行:
# yum -v --noplugins clean all
但我什么输出都没有。Yum 只是挂起,如果我让它挂起,它会在那里呆上几个小时,不占用任何 CPU,只是停止了。正在执行
# strace -f yum -v --noplugins clean all
产生相当多的输出,但随后停止:
...
stat64("/var/lib/rpm/__db.003", {st_mode=S_IFREG|0644, st_size=450560, ...}) = 0
open("/var/lib/rpm/__db.003", O_RDWR|O_LARGEFILE) = 4
fcntl64(4, F_SETFD, FD_CLOEXEC) = 0
mmap2(NULL, 450560, PROT_READ|PROT_WRITE, MAP_SHARED, 4, 0) = 0xb6b34000
close(4) = 0
stat64("/var/lib/rpm/Packages", {st_mode=S_IFREG|0644, st_size=14938112, ...}) = 0
open("/var/lib/rpm/Packages", O_RDONLY|O_LARGEFILE) = 4
fcntl64(4, F_SETFD, FD_CLOEXEC) = 0
read(4, "\0\0\0\0\1\0\0\0\0\0\0\0a\25\6\0\10\0\0\0\0\20\0\0\0\10\0\0k\t\0\0"..., 512) = 5
12
close(4) = 0
open("/var/lib/rpm/Packages", O_RDONLY|O_LARGEFILE) = 4
fcntl64(4, F_SETFD, FD_CLOEXEC) = 0
fstat64(4, {st_mode=S_IFREG|0644, st_size=14938112, ...}) = 0
futex(0xb6b7bd1c, FUTEX_WAIT, 1, NULL
此时我感觉陷入了困境。这是一台生产服务器,所以我不想把它扔掉,甚至不想把所有的 yum 信息都扔掉。除了 yum 之外,服务器运行良好。
答案1
我遇到了同样的问题,我的所有 yum 命令都挂起了。
我运行了以下命令
rm /var/lib/rpm/__db*
rm /var/lib/rpm/.rpm.lock
rm /var/lib/rpm/.dbenv.lock
因此,结合上述一些评论和答案。
答案2
在我的 Redhat 7.2 上,这有助于运行 yum 命令。
rm /var/lib/rpm/.dbenv.lock
答案3
这不是一个直接的答案,但如果其他答案中的命令都没有帮助,那么我会检查命令package-cleanup
。
所有建议的命令都是用于处理 RPM 数据库,但某些已安装包的关系可能存在问题。
从man package-cleanup
:
DESCRIPTION
package-cleanup is a program for cleaning up the locally-installed RPMs.
EXAMPLES
List all dependency problems:
package-cleanup --problems
List all packages that are not in any Yum repository:
package-cleanup --orphans
我将从第二个示例中的命令开始,我以前使用过它并且它解决了我在其中一台 CentOS 机器上遇到的一些与 相关的奇怪问题yum clean
。
答案4
除上述内容外,还:
ps -ef | grep yum # kill off all yum processes
ps -ef | grep rpm # kill off rpm processes
在我完成此操作之前,我无法使上述任何一项工作。
归功于:https://cloudlinux.zendesk.com/hc/en-us/articles/115004580385-If-RPM-or-yum-processes-hangs