【问题标题】:How to record file access over 24 hrs?如何记录超过 24 小时的文件访问?
【发布时间】:2015-04-29 22:11:53
【问题描述】:

我经常无法在我的服务器上运行 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

【问题讨论】:

  • 可能是/etc/cron.daily/apt
  • 为了澄清,它在一天中的任何时间发生,持续几秒钟。这意味着它不能来自/etc/cron.daily/apt,也不能由 cron 作业解决(因为它只持续几秒钟)

标签: linux apt dpkg lsof


【解决方案1】:

我认为有多种解决方案。

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。

【讨论】:

  • 酷。如果我希望这个 while 循环在写入日志文件的同时将 lsof 的输出显示到控制台,需要进行哪些修改?并且不需要保持 SSH 会话打开就可以永远运行吗?这整天...
  • @MichaelHeuberger 我将它扩展到我的答案中。在您的情况下,我从屏幕上完全使用了这个。而且screen是个很棒的工具,你可以在后台拥有9个虚拟角色控制台,下班后拆下,第二天再装上。
【解决方案2】:

您可以创建一个运行的 cron 作业:

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

并尝试在行动中抓住他们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-17
    • 1970-01-01
    • 2019-03-08
    • 1970-01-01
    • 2019-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多