In meinem Skript habe ich mehrere Statusebenen:
- Fernbedienung ist verfügbar (Ping)
- Der Remote-NFS-Dienst ist aktiv
- Remote-NFS exportiert ein bestimmtes Verzeichnis
- Remote-NFS ist gemountet (Mount)
Für (2) und (3) halte ich rcpinfo
die beste Wahl. Für (2) kann ich jedoch nicht herausfinden, wie ich meine Abfrage auf den NFS-Dienst beschränken kann, ohne eine Subshell zu starten (was für diese Anwendung nicht akzeptabel ist). Für (3) bin ich mir nicht sicher, ob diese Informationen auch nur aus der Ferne verfügbar sind ( ssh
natürlich ohne Eingabe).
Ich arbeite an RHEL 6 und habe keinen Zugriff auf Programme, die nicht in der Standarddistribution enthalten sind.
showmount -r remote
wird mir sagen, ob etwasremote
exportiert wird , aber gibt es eine Möglichkeit für mich festzustellen, ob es exportiert wird, ohne eine Subshell (dh eine Pipeline) zu starten?remote:/mnt/dir
showmount -e remote
wird Ihnen sagen, obremote
etwas exportiert wurde.showmount -r
gibt nur eine Fehlermeldung aus, da diese Option nicht vorhanden ist. Sie können versuchen, den Shell-Teilstring-Abgleich zu verwenden, um im Grunde genommen nach einem regulären Ausdruck in der showmount-Ausgabe zu suchen. Vielleicht werfen Sie einen Blick auf zB stackoverflow.com/questions/12619720/…-r
Option versus-e
- das habe ich gemeint :) Der 'Versuchsansatz' wurde schon früher vorgeschlagen. Ich mag es nicht besonders, aber es sieht nach einer echten Option aus.Sie können
showmount -e <server>
für einige Aspekte von # 3 verwenden. Wenn die Exporte einfach sind, würde dies zumindest bedeuten, dass ein Verzeichnis (oder möglicherweise ein übergeordnetes Verzeichnis eines solchen Verzeichnisses) exportiert wird.Für # 2 bin ich mir nicht sicher, wonach Sie suchen. Wenn Sie NFSv3 verwenden, suchen Sie mindestens mountd und nfs (und möchten in einigen Fällen möglicherweise die Sperrmanager bestätigen). Sie können explizit mit rpcinfo nachsehen, wie Sie sagen.
quelle
showmount -r remote
wird mir sagen, ob etwasremote
exportiert wird , aber gibt es eine Möglichkeit für mich festzustellen, ob es exportiert wird, ohne eine Subshell (dh eine Pipeline) zu starten?remote:/mnt/dir
subprocess
Modul. Ich kann damit eine Pipeline einrichten, aber ich möchte das Design lieber nicht so komplizieren. Ich muss vermeiden, eine Subshell zu starten, damit das Skript ordnungsgemäß beendet werden kann. Wenn es beendet wird, werden seine untergeordneten Prozesse beendet, nicht jedoch die untergeordneten Prozesse der untergeordneten Prozesse. Somit würde die Unterschale getötet, aber nicht die Prozesse, die die Unterschale erzeugt. Ich habe auch festgestelltrpcinfo
, dass die Rückkehr bis zu drei Minuten dauern kann. Dies ist die ursprüngliche Grundlage für die Sache ohne Unterschale. Es ist jedoch viel zu spät, dies jetzt zu ändern.rpcinfo
reagiert es nur auf SIGKILL (was eine falsche Zuordnung ist - das Betriebssystem beendet den Prozess offensichtlich nur). Auf jeden Fall würde das immer noch eine Shell startenrpcinfo
- das zugrunde liegende Problem bleibt bestehen.Listen Sie alle Pseudo-Root-NFS-V4-Exportverzeichnisse auf
Schau dir meine Antwort in einem anderen Thread an
quelle
/net
Mount funktioniert,/etc/auto.net
muss das Skript feststellen, dass der Server über einen entsprechenden Export verfügt. Dies verwendet denshowmount
Befehl. Wenn der Server nur über NFSv4 verfügt, funktioniert er nicht (showmount wird angezeigtRPC: Program not registered
und/net/server
meldet sich nurFile not found
)