Linux 如何在24小时内记录文件访问?

Linux 如何在24小时内记录文件访问?,linux,apt,dpkg,lsof,Linux,Apt,Dpkg,Lsof,我经常无法在我的服务器上运行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

我经常无法在我的服务器上运行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小时以上,还有谁在锁定
/⁠变量/⁠解放党/⁠dpkg/⁠锁定

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

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

试着在行动中抓住他们。

我认为有多种解决方案

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

扩展:
在睡眠1时;do lsof-n | grep/var/lib/dpkg/lock;完成| tee--append/var/log/dpkglocktmp.log
将同时写入控制台和日志文件。如果您不想保持ssh连接的活动状态,您可以在一个服务器中运行它

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



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

可能是
/etc/cron.daily/apt
?为了澄清,它会在一天中随时发生,并持续几秒钟。这意味着它不能来自
/etc/cron.daily/apt
,cron作业也不能解决它(因为它只持续几秒钟)。如果我希望这个while循环在写入日志文件的同时显示lsof到控制台的输出,那么需要进行哪些修改?让它永远运行而不需要保持SSH会话打开?“这一整天……”MichaelHeuberger我把它扩展到我的回答中。在你的情况下,我使用的正是这个,从屏幕上。屏幕是一个很好的工具,你可以在后台安装9个虚拟角色控制台,下班后将它们拆下,第二天重新连接。