我正在编写一个shell脚本来检查群集中的节点是否可以看到某些nfs挂载。
脚本通过执行ls / nfs /“machine”| wc -l来工作,如果它大于0,它将通过测试。我对此解决方案的主要关注点是,如果未安装磁盘,ls将挂起多长时间。
我在这个问题“bash checking directory existence hanging when NFS mount goes down”中找到了解决方案,但结果与实际安装的内容不符。
我也试过做一个df -h / nfs /“机器”,但是如果未安装磁盘则挂起很大。
基本上,是否有一种替代方法可以让我知道是否安装了磁盘而没有大挂起?
或者,有没有办法限制执行命令的时间?
提前致谢!
答案 0 :(得分:1)
好的,我设法使用timeout命令解决了这个问题,我回过头来看看BroSlow用非常类似的解决方案更新了他的答案。感谢BroSlow的帮助。
要解决这个问题,我使用的代码是:
if [[ `timeout 5s ls /nfs/machine |wc -l` -gt 0 ]] ; then
echo "can see machine"
else
echo "cannot see machine"
fi
然后我将其缩减为单行命令,以便它可以通过ssh运行并放入循环内(循环遍历主机并执行此命令)。
答案 1 :(得分:0)
几种可能性:
<强> 1)强>
find /nfs/machine -maxdepth 0 -empty
应该比ls /nfs/machine
快很多,但我不确定在这种情况下是否存在问题(也不确定是否需要sleep
,但可能会有一些偏移。
if [[ $(find /nfs/machine -maxdepth 0 -empty 2> /dev/null) == "" ]]; then
sleep 1 && [[ $(mount) == *"/nfs/machine"* ]] && echo "mounted" || echo "not mounted"
else
echo "mounted"
fi
<强> 2)强>
timeout 10 ls -A /nfs/machine | wc -l
if [[ $? > 0 ]]; then
echo "mounted"
else
echo "not mounted"
fi