• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[solved]mount mittels script kleine Unterstützung nötig

Hallo.

Ich habe einen Master NFSD und einen Slave.

Wenn der Client nun kommt, soll er mittels des scriptes fragen ob der Master da ist und dann /home mounten.

wenn der Master down ist, soll er denn Slave nehmen.

Er nimmt aber immer beide ???


#!/bin/sh
TIMESTAMP=$(date +"%d.%m.%Y - %H:%M")
SERVER="192.168.13.51"
SERVER2="192.168.13.82"

#Prüfen ob der Master-Server erreichbar ist...
if ping -c 1 $SERVER >> /dev/null 2>&1
then
mount -t nfs $SERVER:/home /home; echo "Der Master-NFS-Server ist erreichbar und wird bedient."

else
mount -t nfs $SERVER2:/home /home; echo "***** Der NFS-Slave ist erreichbar und wird bedient *****"
fi

Wo kann ich noch drehen?

Danke
 
OP
K

kochanowski

Member
ok. selbst gelöst

so ist es korrekt

#Prüfen ob der Master-Server erreichbar ist...
if ping -c 1 $SERVER >> /dev/null 2>&1
# wenn ja = soll das /home vom Server auf das /home vom Client exportiert werden.
then
mount -t nfs $SERVER:/home /mnt/home; echo "Der Master-NFS-Server ist erreichbar und wird bedient."
# somit ist das Ziel erreicht und das Script kann verlassen werden.
exit 0
# wenn er Mater down ist, so soll sich das /home vom NFSD-Slave gezogen werden.
else
mount -t nfs $SERVER2:/home /mnt/home; echo "***** Der NFS-Slave ist erreichbar und wird bedient *****"
fi
 

Tooltime

Advanced Hacker
Bist du dir da sicher?

Wird hier wirklich der Befehl ping ausgeführt
if ping -c 1 $SERVER >> /dev/null 2>&1
oder ist vielleicht das besser
if `ping -c 1 $SERVER >> /dev/null 2>&1`
 
OP
K

kochanowski

Member
nein, es ist genau so korrekt

mit deiner Idee kommt

line 11: ping -c 1 192.168.13.51 >> /dev/null 2>&1: Datei oder Verzeichnis nicht gefunden
 

framp

Moderator
Teammitglied
Code:
echo ".5"
ping -c 1 192.168.0.5
echo " RC -> $?"
echo ".6"
ping -c 1 192.168.0.6
echo " RC -> $?"

if ping -c 1 192.168.0.6; then
   echo "true"
else
   echo "false"
fi
Das obige Script funktioniert bei mir perfekt. Wenn ich .6 nehme kommt true (Rechner ist online), bei .5 kommt false (Rechner offline). Auch die RC Werte stimmen.
 

Tooltime

Advanced Hacker
Ok gebe zu klar mein Fehler, aber seien wir mal ehrlich, der Befehl "exit 0" verhindert brutal die Ausführung des else-Zweigs durch Abbruch des Scripts, ob wohl dieser eigentlich nicht ausgeführt werden sollte. Ich denke der Fehler ist noch da, nur die Symptome werden brutal unterdrückt. Und genau das ist mir sofort ins Auge gefallen. Meiner bescheidenen Erfahrung nach liegt es meistens daran, das die Bedingung für if nicht richtig gequotet wird und daher nur ein Teilausdruck als Befehl ausgeführt wird, der Rest quasi als neue Befehlzeile gewertet wird und plötzlich ganz komische Dinge im Script passieren. Aber wenn du damit leben kannst, ist eigentlich jede Debatte überflüssig, nur ich könnte wetten das jeder der etwas mehr von Scripten versteht uns gerade auslacht.
 

framp

Moderator
Teammitglied
Hm ... das exit statement hat also das Problem gelöst? Das Script muss auch ohne das exit funktionieren. Die Logic von if-then-else ist ja, dass nur entweder der then Zweig oder der else Zwig ausgeführt wird und nicht beides. Ruf doch mal Dein altes Script mit
Code:
bash -xv xxx
auf und post die Ausgabe.
 
OP
K

kochanowski

Member
Hallo.

Komisch :???:

nun geht es auch ohne exit 0

hier die Ausgabe und vielen Dank

#Prüfen ob der Master-Server erreichbar ist...
if ping -c 1 $SERVER >> /dev/null 2>&1
# wenn ja = soll das /home vom Server auf das /home vom Client exportiert werden.
then
mount -t nfs $SERVER:/home /mnt/home; echo "Der Master-NFS-Server ist erreichbar und wird bedient."
# somit ist das Ziel erreicht und das Script kann verlassen werden.
#exit 0
# wenn er Mater down ist, so soll sich das /home vom NFSD-Slave gezogen werden.
else
mount -t nfs $SERVER2:/home /mnt/home; echo "***** Der NFS-Slave ist erreichbar und wird bedient *****"
fi
+ ping -c 1 192.168.13.51
+ mount -t nfs 192.168.13.51:/home /mnt/home
+ echo 'Der Master-NFS-Server ist erreichbar und wird bedient.'
Der Master-NFS-Server ist erreichbar und wird bedient.
 

Tooltime

Advanced Hacker
Schön das jetzt funktioniert, blöd ist nur das wir eigentlich immer noch nicht wissen, was das eigentliche Problem war. Kommt einen ja vor, als müsste man eine gewissen Script-Gott ein Opfer bringen, um ihn bei der Ausführung der eigenen Scripte gnädig zu stimmen. Ich hatte befürchtet das die Zeile
if ping -c 1 $SERVER >> /dev/null 2>&1
irgendwie aus einander gebrochen und z.B. als etwas interpretiert wird wie
(if ping -c 1 $SERVER) >> /dev/null 2>&1
Daher war mein Gedanke die ping-Befehlzeile als Einheit zu makieren, was ja komplett in die Hose ging. Würde das Problem weiterhin bestehen wäre mein Favorit
if "ping -c 1 $SERVER >> /dev/null 2>&1"
oder einfach alles in eine Subshell stecken
if (ping -c 1 $SERVER >> /dev/null 2>&1)
und natürlich einfach den ping-Befehl in einer eigenen Zeile ausführen und mit if den exit-Status von ping ($?) abfragen. Aber das sind einfach nur Gedanken die mir gerade durch den Kopf schießen. Möglicher Weise übersehe ich da wieder etwas, wie beim quoten mit den `` Zeichen.
 
Oben