daboss
Kaiser
Heyho,
ich habe ein kleines Backupscript zum rsyncen auf den Server ihr zu Hause im Netzwerk gebastelt. Das soll dann via cronjob laufen.
An einer Stelle prüfe ich, ob der Server läuft. Tut er das nicht, wird er über WOL gestartet und das Script soll warten, bis die Kiste via ssh erreichbar ist. Das übernimmt der folgende Teil:
So, er bemerkt korrekterweise, das der Rechner ist aus ist, und startet ihn. (Er bemerkt auch, das der Rechner läuft, und macht dann korrekt weiter, nur als Info am Rande.) Aber er bleibt so lange in der while-Schleife, bis das Script nach $TIMEOUT Sekunden abbricht. Laut der mitlaufenden Debug-Ausgabe sind die ganzen Variablen korrekt belegt, und im echo "schaut der Befehl richtig aus". Nämlich [code[ssh alex@192.168.168.19 -p22 ls > /dev/null 2> /dev/null[/code]
Lasse ich nur die while-Schleife (statt mit den Variablen mit den richtigen Parametern) direkt als Einzeiler im Terminal laufen, dann funktioniert das ganze. (Hier habe ich mich vorhin getäuscht, und meine Aussage jetzt angepasst Sorry.)
Spiele ich aber selbst im Terminal while-Schleife (Sprich: ich setzte manuell immer wieder einen ssh-Aufruf ab), komme ich aber auch sehr wohl (und auch locker innerhalb von $TIMEOUT) auf den Rechner
Jetzt würde mich interessieren, wieso das mit der Schleife nicht hinhaut. Kann mir da jemand helfen, und sagen, wo mein Fehler liegt?
/Edit: Die while-Schleife als Terminaleinzeiler funktioniert doch. Aber im Script geht's leider wirklich nicht
/Edit: Das ganze als Bash-Script
ich habe ein kleines Backupscript zum rsyncen auf den Server ihr zu Hause im Netzwerk gebastelt. Das soll dann via cronjob laufen.
An einer Stelle prüfe ich, ob der Server läuft. Tut er das nicht, wird er über WOL gestartet und das Script soll warten, bis die Kiste via ssh erreichbar ist. Das übernimmt der folgende Teil:
Code:
##
#Falls der Rechner heruntergefahren ist, wird versucht, ihn hochgefahren.
#Falls der Rechner erst hochgefahren werden muss,
#wird er hernach auch wieder heruntergefahren:
##
SHUTDOWN="";
if ! ssh $SSH_USER@$SSH_IP -p$SSH_PORT ls > /dev/null 2> /dev/null; then
echo "[$(date)] Backup-Rechner ist nicht erreichbar. Versuche, ihn jetzt ";
echo "hoch zu fahren. Bitte 20 bis 30 Sekunden gedulden.";
wakeonlan $SSH_MAC
#Warten bis der Rechner da ist:
VERSUCHSSTART=$(date +%s);
while ! ssh $SSH_USER@$SSH_IP -p$SSH_PORT ls > /dev/null 2> /dev/null; do
#Ausgabe nur zum checken, ob die Var's passen...
echo "ssh $SSH_USER@$SSH_IP -p$SSH_PORT ls > /dev/null 2> /dev/null";
#Timout respektieren, ggf. abbrechen:
JETZT=$(date +%s);
DIFF=$((JETZT - VERSUCHSSTART));
if [ "$DIFF" -ge "$TIMEOUT" ]; then
echo "[$(date)] Timeout erreicht. Script wird abgebrochen";
exit 1;
fi;
echo ".";
sleep 10;
done;
echo "[$(date)] Der Backuprechner ist jetzt bereit.";
SHUTDOWN="j";
fi;
Lasse ich nur die while-Schleife (statt mit den Variablen mit den richtigen Parametern) direkt als Einzeiler im Terminal laufen, dann funktioniert das ganze. (Hier habe ich mich vorhin getäuscht, und meine Aussage jetzt angepasst Sorry.)
Spiele ich aber selbst im Terminal while-Schleife (Sprich: ich setzte manuell immer wieder einen ssh-Aufruf ab), komme ich aber auch sehr wohl (und auch locker innerhalb von $TIMEOUT) auf den Rechner
Jetzt würde mich interessieren, wieso das mit der Schleife nicht hinhaut. Kann mir da jemand helfen, und sagen, wo mein Fehler liegt?
/Edit: Die while-Schleife als Terminaleinzeiler funktioniert doch. Aber im Script geht's leider wirklich nicht
/Edit: Das ganze als Bash-Script
Zuletzt bearbeitet: