如何检查apt锁文件是否被锁定?

Modified on: Mon, 15 Apr 2019 09:00:04 +0800

我正在编写一个脚本来执行一些apt命令,但是我遇到了apt / dpkg数据库被锁定的潜在问题,所以我的脚本失败了。我想检查锁文件(即/ var / lib / dpkg / lock),然后在运行它的命令时执行apt之前的操作,但我无法弄清楚apt是如何执行锁的。

锁文件总是在那里,而apt-get没有对文件进行聚集。如何检查它是否正在使用?从一个strace我看到apt-get打开文件,但就是这样。在我的脚本中,我可以打开文件,而apt-get也可以打开它。

作者:gondoi

最佳答案

我发现apt正在使用fcntl。由于我使用Ruby作为脚本语言,我不得不创建自己的函数来寻找锁。原因是因为Ruby没有完全实现fcntl函数。它只提供函数调用和常量。构建植绒结构以及如何通过它们的能力被遗漏或没有记录。

以下是列表我发现了这个问题。

这是我最后编写的函数:

def flocked? &block
  flockstruct = [Fcntl::F_RDLCK, 0, 0, 0, 0].pack("ssqqi")
  fcntl Fcntl::F_GETLK, flockstruct
  status = flockstruct.unpack("ssqqi")[0]
  case status
    when Fcntl::F_UNLCK
      return false 
    when Fcntl::F_WRLCK|Fcntl::F_RDLCK
      return true
    else
      raise SystemCallError, status
  end
end
作者:gondoi

相关问答

添加新评论