2014-01-14 38 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

相關問題