我有一台 Ubuntu 16.04 LTS Web 服务器,它通过 Samba 安装 Windows 文件服务器。Web 服务器需要能够偶尔执行与该服务器上的文件交互的任务。但是,我们最近遇到了 Windows 文件服务器中断的问题,这导致 Web 服务器开始表现非常糟糕。我希望安装失败只会导致尝试与该文件夹交互的命令立即失败(允许我们快速捕获和处理异常),但事实是,与安装的交互似乎非常频繁。慢慢地反而。
以下是 /etc/fstab 中用于挂载共享的条目:
//<Windows server hostname>/TPA /mnt/TPA cifs username=tasker,password=<redacted>,domain=<our domain>,sec=ntlm,iocharset=utf8,sec=ntlm 0 0
我说的“慢慢地”的意思是,如果我这样做ls /mnt
,该命令大约需要 30 秒才能完成,然后会给我以下消息:
user@server:/mnt$ ls
ls: cannot access 'TPA': Host is down
这种缓慢在 Web 应用程序本身中也很明显。如果可能的话,我希望能够设置 Web 应用程序来检测共享是否已关闭并妥善处理,但我不希望每次请求都花 30 秒来处理。有没有办法可以配置一些东西,以便更妥善地处理它?
为了使事情变得更加复杂,Web 应用程序实际上位于一个 Docker 容器内,该容器中有一个添加了指向的卷/mnt
,这可能会使事情变得更糟,但我想如果我解决了主机的问题,那么容器也应该能够同样符合要求。
任何建议将不胜感激!
编辑:我要补充一点,目前,我们已经卸载了有问题的挂载点,并从 fstab 中注释掉了该行,这似乎让它“高兴”了,但理想情况下,我更喜欢一种不那么手动的解决方案。
答案1
只是一些想法...
我不确定如何测试/mnt
访问时会如何响应。但我对如何更准确地预测它有一些想法。
您可以使用smbclient
或nmap
尝试连接到服务器。或者使用等在后台运行某些程序cron
……看起来不错,/mnt 下的文件 - 这样,在遇到超时时不会减慢任何速度。如果任何测试失败,请告知 Web 应用程序。
test -d /mnt && echo true
当文件服务器关闭时也会失败...如果这有帮助的话。但您需要等待它超时。
smbclient //host/share -Uuser password
如果服务器宕机,将几乎立即返回所以它不会减慢任何速度。nmap
但它实际上并没有尝试登录文件服务器。
我希望这些能对你有帮助。