【问题标题】:Python is mounted hangs with stale mount. Suggestions?Python 已挂载,挂载过时。建议?
【发布时间】:2013-05-03 23:19:13
【问题描述】:

我今天遇到了一个问题,挂载过时,这导致我的整个 python 应用程序无限期挂起。

发生的事情是挂载过时了,然后我在那条路径上调用了os.path.exists(path)。通话无限期挂起。

我真的需要防止这种情况发生。我唯一的想法是将os.path.exists 调用放在后台线程上,如果在超时几秒后它仍然存在,则突然终止线程(显然不是首选)。理想情况下,我会先打电话检查挂载是否过时来避免这种情况。

有什么想法吗?仅供参考,所有尝试访问此路径的呼叫都挂起,包括os.path.ismount(path)。虽然这是一个罕见的事件,但我不能让我的整个系统冻结在用户身上:/。

【问题讨论】:

  • 我已经在一些自定义文件系统(保险丝等)中看到了这种行为。它看起来更像是文件系统实现的问题,当内核询问时它会停止给出答案。我会将问题重新标记为 Linux、内核(如果适用)。
  • 这是在 ubuntu 中安装远程 centOS 驱动器(我相信是 nfs)。没有奇怪的文件系统。我们目前正在尝试“软”nfs 挂载选项,但尚未发现挂载会过时以进行测试。

标签: python mount


【解决方案1】:

您可以使用python子进程模块和shell“超时”命令来检测hange mount:

call = subprocess.Popen(["timeout 10 ls /your_mount_dir/ &> /dev/null; echo $?"], stdout=subprocess.PIPE, shell=True)
output = call.communicate()
result = output[0].strip()
if result != '0':
   # Mount is hung.

【讨论】:

    【解决方案2】:

    类似于myheartsgoon 的回答,但更安全、更简单。

    try:
        subprocess.check_call(["timeout", "4", "ls", "/mnt/your_nas"])
    except subprocess.CalledProcessError:
        # is hanging
    

    【讨论】:

      猜你喜欢
      • 2017-03-15
      • 2020-02-19
      • 2020-11-16
      • 1970-01-01
      • 2018-03-05
      • 2019-06-09
      • 2018-10-11
      • 2017-05-09
      • 1970-01-01
      相关资源
      最近更新 更多