如何记录超过24小时的文件访问?

How to record file access over 24 hrs?

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

$ 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

你可以做一个 运行:

的 cron 作业
 lsof | grep /var/lib/dpkg/lock >> whodunit.txt

并尝试当场抓住他们。

我认为有多种解决方案。

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

扩展名: 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 最相似的问题 update/install 问我一些事情,我忘记了,后来尝试 运行 另一个 ssh 会话中的另一个 apt。