如何防止展示架挂起?

如何防止展示架挂起?

我们正在实施一个 Web 前端来管理 NFS 和 CIFS 共享文件夹。其中一部分显示可从任意 IP 地址获取的可用共享点(导出)。

后端用于smbclient -L <ip> -U <user>查询SMB/CIFS共享,用于showmount -e <ip>查询NFS共享。

但是,showmount如果目标服务器运行任何类型的防火墙(无论 Windows、Mac 或 Linux),则会挂起。 (这些 SE/SU 帖子这里这里提到 NFS 有防火墙问题)

我们测试了现有和不存在机器的展示安装。测试以下几种组合showmount -e <ip>

Machine NFSD     Firewall   Result
Exists  Stopped  Off        clnt_create: RPC: Unable to receive
Exists  Stopped  On         HANGS
Exists  Running  On         HANGS
Exists  Running  Off        returns list of exports
None    n/a      n/a        clnt_create: RPC: Unable to receive

挂起时showmount只能被SIGKILL(-9)杀死。我们尝试使用timeout一段时间后放弃,但它也挂起。

从另一个终端运行strace显示它卡住了connect

$ strace -p 63552
strace: Process 63552 attached
connect(4, {sa_family=AF_INET, sin_port=htons(111), sin_addr=inet_addr("192.168.2.10")}, 16

问题在这种场景下,如何才能使用showmount而不挂起呢?

一种想法是编写一个程序,首先尝试打开与 NFS IP:端口的连接,如果成功,则运行showmount。但还有其他办法吗?

后端运行在 Centos 8 上。

答案1

可以指示该timeout命令使用该SIGKILL信号(请参阅man timeout)。这showmount非常有效地适用于:

timeout --signal KILL 3s showmount -e remoteNFSServer

相关内容