Linux-Shell-Skript: Wie erkennen NFS-Mount-Punkt (bzw. der Server) ist tot?
Regel auf dem NFS-Client, zu erkennen, wie die Montiert-Stelle ist nicht mehr verfügbar oder TOT vor Server-Ende, indem Sie über die Bash-Shell-Skript aus?
Normalerweise mache ich:
if ls '/var/data' 2>&1 | grep 'Stale file handle';
then
echo "failing";
else
echo "ok";
fi
Aber das problem ist, vor allem, wenn der NFS-Server ist völlig tot oder gestoppt, auch die, ls
Befehl, in das Verzeichnis auf der Client-Seite ist, erhängt oder starben. Bedeutet, das script oben ist nicht mehr nutzbar.
Gibt es eine Möglichkeit, zu erkennen, diese wieder bitte?
Du musst angemeldet sein, um einen Kommentar abzugeben.
"stat" - Befehl ist eine etwas sauberere Möglichkeit:
Darüber hinaus können Sie mit rpcinfo, um zu erkennen, ob die nfs Freigabe verfügbar ist:
Hinzugefügt 2013-07-15T14:31:18-05:00:
Ich sah in diesem weiter, ich arbeite auch an einem Skript, Bedürfnisse zu erkennen, veraltete mountpoints. Inspiriert von eine der Antworten zu "Ist es eine gute Möglichkeit zu erkennen, eine veraltete NFS-mount", ich denke die folgenden werden kann, der zuverlässigste Weg, um zu überprüfen, für die Veralterung einer bestimmten mountpoint in der bash:
"Lesen -t1" - Konstrukt zuverlässig mal aus der subshell, wenn stat-Befehl hängt aus irgendeinem Grund.
Hinzugefügt 2013-07-17T12:03:23-05:00:
Obwohl
read -t1 < <(stat -t "/my/mountpoint")
funktioniert, es scheint nicht ein Weg, um stumm seine Fehler ausgegeben, wenn der mountpoint ist veraltet. Hinzufügen> /dev/null 2>&1
entweder innerhalb der subshell, oder am Ende der Befehl-Linie bricht. Mit einem einfachen test:if [ -d /path/to/mountpoint ] ; then ... fi
auch funktioniert, und kann bevorzugt in Skripten. Nach vielem testen ist es, was ich am Ende mit.Hinzugefügt 2013-07-19T13:51:27-05:00:
Eine Antwort auf meine Frage "Wie kann ich lese-timeouts mit stat?" lieferte zusätzliche Details zu den muting-die Ausgabe von stat (oder von rpcinfo), wenn das Ziel nicht verfügbar ist und der Befehl hängt für ein paar Minuten, bevor es Zeit, sich auf seine eigenen. Während
[ -d /some/mountpoint ]
kann verwendet werden, zu erkennen, dass eine veraltete mountpoint, es gibt keine vergleichbare alternative für rpcinfo, und daher ist die Verwendung vonread -t1
Umleitung ist die beste option. Die Ausgabe von der subshell kann stumm geschaltet werden, mit 2>&-. Hier ist ein Beispiel aus CodeMonkey ' s Antwort:Vielleicht jetzt diese Frage wird vollständig beantwortet :).
read -t1 < <(stat -t "$MOUNT_DIR" 2>&-)
liefern einen return-Wert142
. Dabei[ ! $? -eq 0 ]
so ein test ist wahrscheinlich besser.read -t1 < <(stat -t "$mountpoint" 2>&-)
wird aus einem offenen Datei-handle (oder ähnlich), um den angehängten Ordner. Damit die mount-option schlägt fehl, wenn Sie nicht die-l
Flagge. Sie könnentimeout 1 stat -t "$mountpoint" > /dev/null
statt. Dies wird zu töten, dassstat
Befehl und damit töten, es öffnen, Datei-handle.Dem endgültigen Antworten geben, von Ville und CodeMonkey sind fast richtig. Ich bin mir nicht sicher, wie niemand aufgefallen ist, aber eine $ANTWORT string mit Inhalten ist ein Erfolg, kein Fehler. So ein leer $ANTWORT-string bedeutet, dass der mount veraltet ist. So, die bedingt verwenden sollte,- z, nicht -n:
Habe ich lief dieser mehrfach mit einer gültigen und ungültigen Einhängepunkt und es funktioniert. Die -n prüfen Sie gab mir reverse-Ergebnisse, echo der Berg war abgestanden, wenn es war absolut gültig.
Auch, die doppelte Klammer ist nicht notwendig für eine einfache string-check.
mit "-z" bekomme ich eine NFS-abgestanden, aber es ist Total falsch, ich kann accces und Lesen und schreiben einer Datei