gpt4 book ai didi

python - 如果 NFS 服务器已挂载并在线,请检查 python 脚本

转载 作者:IT王子 更新时间:2023-10-29 01:02:15 24 4
gpt4 key购买 nike

我有一个类似于 Check if NFS share is mounted in python script 的问题,但是在我的情况下,NFS 服务器已安装,但服务器崩溃并脱机。我试图通过使用 os.dir.ismount('/path/to/mountpoint/) 来考虑这一点,但是我的问题是这个命令需要永远完成。

当我尝试制作一个简单的 ls/path/to/mountpoint 时,此命令也没有完成。有什么根本性的错误吗?我的设置是一个 linux NFSv3 服务器和一个 linux NFS 客户端。

我通常希望,如果 NFS 服务器无法挂载或无法访问,ls 命令会显示本地目录的内容,而不是停止终端。

最佳答案

NFS 会发生这种情况,如果您挂载了 NFS 共享并且服务器不再经常通过网络访问,那么对挂载的任何 IO 访问都会卡住。如果您尝试在终端中运行 ls,您会看到它只是卡住了,不会失败,只是无休止地等待它永远不会得到的响应。所以我建议你做的是在你的 python 代码中运行 ls 然后设置超时。达到此超时后,您可以让它引发异常。下面是我测试过的一个实现。 call_timeout 是一个函数,您可以指定要执行的命令和超时时间(以秒为单位)。如果命令在超时之前完成,它会立即返回,否则它会终止它生成的进程并引发一个你可以捕获的 OSError。您可以选择返回 True 或 False,这是一种设计选择。下面还提供了一些示例调用。

代码

from subprocess import Popen, check_output
import time

def call_timeout(cmd, timeout):
start = time.time()
p = Popen(cmd)
while time.time() - start < timeout:
if p.poll() is not None:
return
time.sleep(0.1)
p.kill()
raise OSError('command timed out')

调用示例

这应该没有错误地返回:

call_timeout(["sleep", "1"], 0.5)

这会引发 OSError 错误:

call_timeout(["sleep", "1"], 1.5)

你想要这样的东西:

call_timeout(["ls", "/path/to/mountpoint"], 5.0)

关于python - 如果 NFS 服务器已挂载并在线,请检查 python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13685239/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com