2014-01-14 39 views
-2

我正在编写shell脚本来检查群集中的节点是否可以看到某些nfs挂载。检查挂载NFS目录时是否没有大的挂起故障

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

我在这个问题的解决方案“bash checking directory existence hanging when NFS mount goes down”,但结果并不符合实际安装。

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

基本上,有没有另一种方式可以让我知道如果磁盘挂载或没有大的挂起?

或者,是否有限制命令可以执行的时间的方法?

在此先感谢!

回答

1

好吧,我设法解决这个使用超时命令,我在这里查看,看看BroSlow用一个非常类似的解决方案更新他的答案。感谢BroSlow的帮助。

为了解决这个问题,我使用的代码是:

if [[ `timeout 5s ls /nfs/machine |wc -l` -gt 0 ]] ; then 
     echo "can see machine" 
else 
     echo "cannot see machine" 
fi 

我然后还原此到单个行命令,以便它可以通过ssh运行,并且通过主机把一个循环(内循环并执行此命令)。

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 
+0

我看到了,我试过了你的解决方案,我遇到的主要问题是如果集群还没有访问该磁盘,但是你的命令失败了,但是在ls/nfs/machine之后你的命令是一个成功。所以即使群集节点可以访问/ nfs/machine,也有可能会失败。我的测试是查看磁盘是否可以安装,而不是目前是否安装。 – stuts

+0

@stuts编辑了一些其他的可能性,为你做的任何一种工作(在几秒钟内将'timeout'改为合理的值或者追加'm'等等......几分钟) – BroSlow

相关问题