NFS Share per Skript mounten

f.gruber

f.gruber

Eroberer
Ich möchte ein NFS Share per Skript mounten. Wenn der Server aber nicht läuft, hängt das Skript endlos an dieser Stelle.
Gibt es Optionen, sodass das Mounten nur eine gewisse Zeit versucht wird. Alle Optionen, die ich probiert habe, haben nichts gebracht.
Code:
mount -t nfs -o nfsvers=3 10.0.0.110:/media/disk /media/disk
Code:
mount -t nfs -o nfsvers=3,soft,intr,timeo=5 10.0.0.110:/media/disk /media/disk
Tut mir leid, stehe wahrscheinlich komplett auf der Leitung.
 
Quick and dirty - ungetestet

Code:
#! /bin/bash

PIDFILE="$(mktemp)"
TIMEOUT=10

{ sleep ${TIMEOUT}; kill -2 $(cat ${PIDFILE}); } &

mount -t nfs -o nfsvers=3 10.0.0.110:/media/disk /media/disk & echo $! > ${PIDFILE}
 
Danke, das funktioniert. Um es zu verstehen, brauche ich leider Nachhilfe.
Was bewirken die geschweiften Klammern in dieser Zeile?
Code:
{ sleep ${TIMEOUT}; kill -2 $(cat ${PIDFILE}); }
 
Das bewirkt, dass sleep und danach kill zusammen als ein Programm imHintergrund ausgeführt werden, ohne eine subshell zu starten (Stichwort: Funktion).
Es ginge in diesem Fall auch mit einer Subshell.
Code:
( sleep ${TIMEOUT}; kill -2 $(cat ${PIDFILE}) ) &
Allerdings vermeide ich diese, wo ich kann, da Subshell-Builtins sich nicht auf die Parent-shell auswirken.

Hast du z.B. in einem Sktipt ein statement, das im Hintergrund das Skript beeden soll, z.B.:
Code:
/bin/dostuff || ( echo "Hat nicht geklappt!"; exit 1 )
, so wirkt sich das exit nicht auf die Shell aus, in der
Code:
 /bin/dostuff
ausgeführt wird, sondern nur innerhalb der Subshell
Code:
(..)
, wohingegen
Code:
/bin/dostuff || { echo "Hat nicht geklappt!"; exit 1; }
die Shell in der /bin/dostuff ausgeführt wird mit beenden würde. 8)

VG

Schard
 
Danke für die Erklärungen.
Wäre es nicht einfacher, den Port 111 abzufragen, um zu sehen, ob der NFS Server läuft?
Habe nämlich gerade gesehen, dass der Port 111 (rpcbind) aktiv ist, wenn der NFS Server in Betrieb ist. ...

Dann versuche ich erst gar keinen Mount, wenn der Port mit nmap nicht aufgelistet wird ...
 
Zu prüfen ob der NFS-Server läuft bevor man mountet ist auch ein Ansatz.
Ich würde hier aber keinen Portscan machen sondern Überprüfen ob "showmount" vernünftige Ergebnise liefert.

Code:
showmount --exports 10.0.0.110

sollte eine Liste aller NFS-Exports anzeigen
Code:
Export list for 10.0.0.110:
/media/disk                   (Liste von clientips)

und sich sofern erfolgreich mit dem Exitcode 0 beenden.

Code:
showmount 10.0.0.110 > /dev/null     &&      mount -t nfs -o nfsvers=3 10.0.0.110:/media/disk /media/disk

mfg
HeadCrash
 
Danke, das ist ein guter Hinweis.
Habe diese Zeilen jetzt in mein Skript eingefügt:
Code:
HOST=10.0.0.110
MOUNTPOINT=/media/disk
# NFS Mount versuchen
showmount $HOST > /dev/null && mount -t nfs -o nfsvers=3,noauto $HOST:$MOUNTPOINT $MOUNTPOINT &> /dev/null
 
if [ "$(nfsstat -m | grep $HOST:$MOUNTPOINT)" ] ; then # wenn NFS Share gemountet ist 
      mkdir -p $ZIEL_Verzeichnis  &> /dev/null
      HOST=localhost
      echo "-----------------------"
      echo Sicherung auf NFS Share $MOUNTPOINT
else
      echo Kann $ZIEL_Verzeichnis nicht über NFS mounten.
      echo Versuche SSH Verbindung zum Host $HOST
      ...
fi
 

Ähnliche Themen

NagiosGrapher 1.7.1 funktioniert nicht

kann nfs share nicht mounten

[openSuse10.2] SATA mal wieder...

/HILFEE/Server Bottet nicht mehr

CGI laesst sich nicht ausfuehren

Zurück
Oben