цикл для проверки всех точек монтирования NFS - PullRequest
1 голос
/ 08 мая 2019

этот код работает очень хорошо

mountpoint="/mnt/testnfs"
read -t1 < <(stat -t "$mountpoint" 2>&-)
if [ -z "$REPLY" ] ; then
echo "NFS mount stale. Removing..."
fi

Если я попытаюсь поместить это в цикл для:

declare -a nfs_array=( "/mnt/testnfs1" "/mnt/testnfs2/" )

for i in "${nfs_array[@]}"
    do
        read -t1 < <(stat -t "$nfs_array" 2>&-)
        if [ -z "$REPLY" ] ; then
            echo "NFS dead"
        fi 
done

Цель состоит в том, чтобы протестировать все точки монтирования, этот код тестировать и читать только первые записи из nfs_array. Если я поменял testnfs1 на testnfs2, этот код проверит точку монтирования testnfs2 и забудет testnfs1: - (

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Если вы действительно хотите перечислить all nfs mounts (заголовок говорит об этом), тогда используйте либо:

mount | grep ' type nfs' | ...

Это может иметь ложные срабатывания, поскольку точка монтирования или путь монтирования содержит type nfs.

Если доступна файловая система / proc /, это лучший способ:

awk '$3 ~ /^nfs/ {print}' /proc/mounts | ...

Здесь я не уверен, что произойдет, если точка монтирования или путь монтирования содержит пробел - у меня никогда не было такой ситуации.

0 голосов
/ 08 мая 2019

В вашем цикле должно быть:

read -r -t1 < <(stat -t "$i" 2>&-)

В настоящее время он просто читает первое значение массива, а $i не используется.

...