检查NFS目录是否在没有大挂起的情况下挂起

时间:2014-01-14 11:48:01

标签: linux bash shell mount nfs

我正在编写一个shell脚本来检查群集中的节点是否可以看到某些nfs挂载。

脚本通过执行ls / nfs /“machine”| wc -l来工作,如果它大于0,它将通过测试。我对此解决方案的主要关注点是,如果未安装磁盘,ls将挂起多长时间。

我在这个问题“bash checking directory existence hanging when NFS mount goes down”中找到了解决方案,但结果与实际安装的内容不符。

我也试过做一个df -h / nfs /“机器”,但是如果未安装磁盘则挂起很大。

基本上,是否有一种替代方法可以让我知道是否安装了磁盘而没有大挂起?

或者,有没有办法限制执行命令的时间?

提前致谢!

2 个答案:

答案 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