Linux Shell Script: Comment détecter NFS Mount-point (ou le Serveur) est mort?
Généralement sur le Client NFS, comment détecter les Monté-Point n'est plus disponible ou MORTS depuis le Serveur de fin d', en utilisant le Shell Bash Script?
Normalement, je n':
if ls '/var/data' 2>&1 | grep 'Stale file handle';
then
echo "failing";
else
echo "ok";
fi
Mais le problème c'est que quand surtout le Serveur NFS est totalement mort ou arrêté, même le, ls
de commande, dans le répertoire, à côté Client est pendu ou à la mort. Les moyens, le script ci-dessus n'est plus utilisable.
Est-il un moyen de le détecter à nouveau s'il vous plaît?
OriginalL'auteur | 2013-07-12
Vous devez vous connecter pour publier un commentaire.
"stat" de la commande est un peu le moyen le plus propre:
En outre, vous pouvez utiliser rpcinfo pour détecter si le partage nfs distant est disponible:
Ajouté 2013-07-15T14:31:18-05:00:
J'ai regardé dans cette nouvelle que je travaille aussi sur un script, qui doit reconnaître vicié des points de montage. Inspiré par l'une des réponses "Est-il un bon moyen pour détecter un état de montage NFS", je pense que le suivant peut être le moyen le plus fiable pour vérifier la péremption d'un point de montage spécifique à bash:
"lire -t1" construire de façon fiable fois sur le shell interne est exécuté si la commande stat se bloque pour une raison quelconque.
Ajouté 2013-07-17T12:03:23-05:00:
Bien que
read -t1 < <(stat -t "/my/mountpoint")
fonctionne, il ne semble pas être un moyen pour couper sa sortie d'erreur lorsque le point de montage est vicié. L'ajout de> /dev/null 2>&1
soit dans le shell interne est exécuté, ou à la fin de la ligne de commande, il tombe. À l'aide d'un test simple:if [ -d /path/to/mountpoint ] ; then ... fi
fonctionne aussi, et peut préférable dans les scripts. Après beaucoup d'essais c'est ce que j'ai fini de l'utiliser.Ajouté 2013-07-19T13:51:27-05:00:
Une réponse à ma question "Comment puis-je lire des dépassements de délais avec stat?" a fourni des détails supplémentaires sur l'inhibition de la sortie de stat (ou rpcinfo) lorsque la cible n'est pas disponible et la commande se bloque pendant quelques minutes avant de temps sur son propre. Alors que
[ -d /some/mountpoint ]
peut être utilisé pour détecter un état point de montage, il n'existe aucune autre alternative pour rpcinfo, et donc d'utiliser desread -t1
redirection est la meilleure option. La sortie de la shell interne est exécuté peut être coupé avec 2>&-. Voici un exemple de CodeMonkey réponse:Peut-être maintenant cette question est entièrement répondu :).
Belle réponse. J'ai vu
read -t1 < <(stat -t "$MOUNT_DIR" 2>&-)
fournissent un valeur de retour de142
. Ce faisant,[ ! $? -eq 0 ]
comme un test est probablement mieux.Un autre point:
read -t1 < <(stat -t "$mountpoint" 2>&-)
laissera un descripteur de fichier ouvert (ou similaire) pour le montage du dossier. D'où l'option de montage échouera si vous n'utilisez pas le-l
drapeau. Vous pouvez utilisertimeout 1 stat -t "$mountpoint" > /dev/null
à la place. Cela tuera questat
de commande et donc de le tuer du descripteur de fichier ouvert.OriginalL'auteur Ville
La finale de réponses à donner par la Ville et CodeMonkey sont presque correct. Je ne suis pas sûr de savoir comment personne n'a remarqué cela, mais un $REPONSE chaîne dont le contenu est un succès, pas un échec. Ainsi, un vide $REPONSE chaîne signifie que le support est obsolète. Ainsi, la condition doit utiliser -z, pas -n:
J'ai couru plusieurs fois, avec un valide et non valide du point de montage, et cela fonctionne. L'-n vérifiez m'a donné inverse des résultats, en écho à la montagne était vicié lorsque c'était absolument valide.
Aussi, le double support n'est pas nécessaire pour une simple chaîne de vérifier.
OriginalL'auteur life359