2

我经常无法在我的服务器上运行 apt-get install 。像那样:

$ sudo apt-⁠get install tmux
E: Could not get lock /⁠var/⁠lib/⁠dpkg/⁠lock -⁠ open (11: Resource
temporarily unavailable)
E: Unable to lock the administration directory (/⁠var/⁠lib/⁠dpkg/⁠), is
another process using it?

经常发生,几乎每天都有。每当我试图找出还有谁在用lsof命令锁定它时,我就来不及了,锁已经消失了。真的很奇怪。

有什么窍门,我怎么能记录超过 24 小时还有谁在锁定/⁠var/⁠lib/⁠dpkg/⁠lock

4

2 回答 2

2

我认为有多种解决方案。

1:写一个简单的脚本,例如while sleep 1; do lsof -n|grep /var/lib/dpkg/lock >>/var/log/dpkglocktmp.log; done。它很简单,但不是很漂亮,但作为一个短时间的错误跟踪,对我来说还可以。您将在日志文件中获得进程列表。

扩展: while sleep 1; do lsof -n|grep /var/lib/dpkg/lock; done|tee --append /var/log/dpkglocktmp.log将同时写入控制台和日志文件。如果您不保持 ssh 连接处于活动状态,则可以在screen中运行它。

2:Linux 内核有一个功能inotify,它使进程能够在他们正在观看的文件上发生事件时获得信号。它周围有许多工具,最著名的是incron. 它使您能够在文件事件的情况下调用脚本。可能还有更复杂的工具,专门针对与您类似的问题。


我遇到了最类似的问题,因为 apt 更新/安装向我询问了一些问题,我忘记了这一点,后来尝试在另一个 ssh 会话中运行另一个 apt。

于 2015-04-29T22:18:10.950 回答
1

你可以做一个运行的 cron 作业:

 lsof | grep /var/lib/dpkg/lock >> whodunit.txt

并试图抓住他们的行为。

于 2015-04-29T22:18:00.687 回答