"стат" команда несколько чище способ:
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
Кроме того, вы можете использовать rpcinfo для обнаружения, доступен ли доля удаленного NFS:
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 к «Есть хороший способ обнаружить затхлый NFS монтировать», я думаю, что следующий может быть наиболее надежным способом проверить черствости определенной точки монтирования в Баш:
read -t1 < <(stat -t "/my/mountpoint")
if [ $? -eq 1 ]; then
echo NFS mount stale. Removing...
umount -f -l /my/mountpoint
fi
«читать -t1 «Конструкция надежно разгоняет подоболочку, если команда stat зависает по какой-то причине.
Добавлено 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 ]
может использоваться для обнаружения устаревшей точки монтирования, альтернативы для rpcinfo нет, поэтому использование перенаправления 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
Возможно, теперь этот вопрос полностью ответил :).
Я использовал устаревшее обнаружение точки монтирования NFS в моем скрипте ** nfs_automount **, [теперь доступно на GitHub] (https://github.com/vwal/nfs_automount). – Ville
Хороший ответ. Я видел 'read -t1 <<(stat -t" $ MOUNT_DIR "2> & -)' предоставление возвращаемого значения '142'. Итак, сделаем '[! $? -eq 0] ', поскольку тест, вероятно, лучше. – psiphi75
Еще один момент: 'read -t1 <<(stat -t" $ mountpoint "2> & -)' оставит дескриптор открытого файла (или аналогичный) прикрепленной папке. Следовательно, параметр mount не будет работать, если вы не используете флаг '-l'. Вместо этого вы можете использовать 'timeout 1 stat -t '$ mountpoint">/dev/null'. Это убьет эту команду 'stat' и, следовательно, убьет ее дескриптор открытого файла. – psiphi75