"स्टेट" कमांड कुछ हद तक एक क्लीनर तरीका है:
statresult=`stat /my/mountpoint 2>&1 | grep -i "stale"`
if [ "${statresult}" != "" ]; then
#result not empty: mountpoint is stale; remove it
umount -f /my/mountpoint
fi
साथ ही, आपको पता लगाने के लिए कि क्या दूरस्थ NFS शेयर उपलब्ध है rpcinfo उपयोग कर सकते हैं:
rpcinfo -t remote.system.net nfs > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo Remote NFS share available.
fi
जोड़ा गया 2013-07-15T14 : 31: 18-05: 00:
मैंने इस पर ध्यान दिया क्योंकि मैं एक ऐसी स्क्रिप्ट पर भी काम कर रहा हूं जिसे स्टेल माउंट पॉइंट्स को पहचानने की आवश्यकता है। one of the replies से प्रेरित होकर करने के लिए "वहाँ एक बासी एनएफएस माउंट पता लगाने के लिए एक अच्छा तरीका है", मुझे लगता है कि निम्नलिखित बैश में एक विशिष्ट माउंटप्वाइंट की बासांपन के लिए जाँच करने के लिए सबसे विश्वसनीय तरीका हो सकता है:
read -t1 < <(stat -t "/my/mountpoint")
if [ $? -eq 1 ]; then
echo NFS mount stale. Removing...
umount -f -l /my/mountpoint
fi
"-t1 पढ़ "कुछ कारणों से स्टेट कमांड लटकने पर सबहेल से भरोसेमंद समय बनाएं।
जोड़ा गया 2013-07-17T12: 03: 23-05: 00:
read -t1 < <(stat -t "/my/mountpoint")
हालांकि काम करता है, वहाँ अपनी त्रुटि उत्पादन म्यूट करने के लिए जब माउंटप्वाइंट बासी है एक तरह से होना करने के लिए प्रतीत नहीं होता। > /dev/null 2>&1
या तो सबहेल के भीतर, या कमांड लाइन के अंत में इसे तोड़ देता है। एक साधारण परीक्षण का उपयोग करना: if [ -d /path/to/mountpoint ] ; then ... fi
भी काम करता है, और स्क्रिप्ट में बेहतर हो सकता है। बहुत परीक्षण के बाद मैं इसका उपयोग कर समाप्त हुआ।
जोड़ा गया 2013-07-19T13: 51: 27-05: 00:
मेरे सवाल "How can I use read timeouts with stat?" स्टेट (या rpcinfo) के उत्पादन को म्यूट करने के बारे में अतिरिक्त विस्तार प्रदान की के लिए एक उत्तर जब लक्ष्य उपलब्ध नहीं है और आदेश कुछ ही मिनटों के लिए लटकता है इससे पहले कि वह स्वयं ही समय निकाल दे। जबकि [ -d /some/mountpoint ]
का उपयोग स्टेल माउंटपॉइंट का पता लगाने के लिए किया जा सकता है, आरपीसीएनएफओ के लिए कोई समान विकल्प नहीं है, और इसलिए read -t1
रीडायरेक्शन का उपयोग सबसे अच्छा विकल्प है। सबहेल से आउटपुट 2> & - के साथ म्यूट किया जा सकता है। यहाँ CodeMonkey's response से एक उदाहरण है:
mountpoint="/my/mountpoint"
read -t1 < <(stat -t "$mountpoint" 2>&-)
if [[ -n "$REPLY" ]]; then
echo "NFS mount stale. Removing..."
umount -f -l "$mountpoint"
fi
शायद अब यह सवाल पूरी तरह से उत्तर है :)।
मैंने अपनी स्क्रिप्ट ** एनएफएस_automount **, [अब गिटहब पर उपलब्ध] [https://github.com/vwal/nfs_automount) में बाएं एनएफएस माउंट पॉइंट डिटेक्शन का उपयोग किया। – Ville
अच्छा जवाब। मैंने 'read -t1 <<(stat -t" $ MOUNT_DIR "2> & -) '' 142' का रिटर्न मान प्रदान किया है। तो कर रहे हैं [! $? -ईक 0] 'एक परीक्षण के रूप में शायद बेहतर है। – psiphi75
एक और बिंदु: 'read -t1 <<(stat -t "$ mountpoint" 2> & -)' आरोहित फ़ोल्डर में एक खुली फ़ाइल हैंडल (या समान) छोड़ देगा। इसलिए यदि आप '-l' ध्वज का उपयोग नहीं करते हैं तो माउंट विकल्प विफल हो जाएगा। आप इसके बजाय 'टाइमआउट 1 स्टेट-टी" $ माउंट पॉइंट ">/dev/null' का उपयोग कर सकते हैं। यह उस 'stat' कमांड को मार देगा और इसलिए इसे खुले फ़ाइल हैंडल को मार देगा। – psiphi75