Bash Script contains Bilden und nutzen
Tach,
habe meinem Script ein paar contains verleihen wollen.
Irgend wie bekomme ich nun komische Ergebnisse:
nach dem Ich für die Zeile 17 die Zeile 16 aktiviere bekomme ich die Aussage: „1.VM konnte nicht gestartet werden!“ Dabei werden aber alle gestartet.
Wenn ich statt der Zeile 16 die 17 verwende, dann läuft alles richtig. Was genau könnte hier die Ursache sein?
Grüße
Ich
habe meinem Script ein paar contains verleihen wollen.
Irgend wie bekomme ich nun komische Ergebnisse:
nach dem Ich für die Zeile 17 die Zeile 16 aktiviere bekomme ich die Aussage: „1.VM konnte nicht gestartet werden!“ Dabei werden aber alle gestartet.
Wenn ich statt der Zeile 16 die 17 verwende, dann läuft alles richtig. Was genau könnte hier die Ursache sein?
#!/bin/sh
WTAG=`date +%a`
TAGZEIT=`date +%d.%m.%Y-%H:%M:%S`
DATUMZEIT=“$WTAG $TAGZEIT“
AUSGABEF=/tmp/ausgabe.txt
ZEITF=/tmp/zeit.txt
LOGTMP=/tmp/vmlogtmp.txt
LOGFILE=/root/vmlog.txt
case $1 in
start)
for i in $(virsh list --all | grep 'ausschalten' | awk -F " " '{print $2}')
do
DOMSTART="Domain $i gestartet"
# echo $DATUMZEIT > $ZEITF
echo `date +%a` `date +%d.%m.%Y-%H:%M:%S` > $ZEITF
virsh start $i > $AUSGABEF
sed -i '$d' $AUSGABEF
cat $ZEITF $AUSGABEF >> $LOGFILE
cat $ZEITF $AUSGABEF > $LOGTMP
if [ `grep -i "$DOMSTART" $AUSGABEF | wc -l` != 1 ]
then
echo "$i konnte nicht gestartet werden!"
else
echo "Sart von $i erfolgreich"
fi &
done
;;
stop)
for i in $(virsh list | grep laufend | awk -F " " '{print $2}')
do
virsh shutdown $i &
if [ $? -eq 0 ]
then
echo $i wurde herruntergefahren alles ok!
else
echo $i kann nicht, nichts ist ok!
fi
done
;;
*) echo "Please use start or stop."
;;
esac
Grüße
Ich
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 337215
Url: https://administrator.de/contentid/337215
Ausgedruckt am: 23.11.2024 um 16:11 Uhr
19 Kommentare
Neuester Kommentar
Hallo,
Deine Ausgabe sieht echt merkwürdig aus.
Der startet schon den 2. Durchlauf der Schleife bevor er vom 1. Durchgang die if-Anweisung prüft.
Mit Zeile 17 statt 16 hast du eine minimal höhere Druchlaufzeit, was ausreicht für die if-Abfrage. Daher geht es auch mit dem "sleep 1"
Das eigentliche Problem ist dadurch aber nicht behoben, sondern nur vertuscht.
Ich weiß leider nicht was für eine Distribution du benutzt. Das "#!/bin/sh" kann je nach Betriebssystem standartmäßig auf unterschiedliche Shells verweisen. Bei Fedora wird da "bash" ausgeführt und unter Ubuntu beispielsweise "dash". Prüfen kannst du das mit "ls -l /bin/sh".
Ich gebe in meinen Scripten immer direkt "#!/bin/bash" in Zeile 1 ein um sicher zu gehen.
Deine Ausgabe sieht echt merkwürdig aus.
Der startet schon den 2. Durchlauf der Schleife bevor er vom 1. Durchgang die if-Anweisung prüft.
Mit Zeile 17 statt 16 hast du eine minimal höhere Druchlaufzeit, was ausreicht für die if-Abfrage. Daher geht es auch mit dem "sleep 1"
Das eigentliche Problem ist dadurch aber nicht behoben, sondern nur vertuscht.
Ich weiß leider nicht was für eine Distribution du benutzt. Das "#!/bin/sh" kann je nach Betriebssystem standartmäßig auf unterschiedliche Shells verweisen. Bei Fedora wird da "bash" ausgeführt und unter Ubuntu beispielsweise "dash". Prüfen kannst du das mit "ls -l /bin/sh".
Ich gebe in meinen Scripten immer direkt "#!/bin/bash" in Zeile 1 ein um sicher zu gehen.
Sobald dein virsh start fertig ist, läuft das Script weiter und sollte alle anderen normal starten.
Nur wenn dieser Befehl hängen bleibt und nicht beendet, hast du ein Problem. Das ist dann aber vermutlich eh ein größeres.
Wir hatten in den letzten 4 Jahren damit keine Probleme.
Noch ein kleiner Tipp:
Falls die Images bei euch auch auf normalen HDDs liegen, kann eine Zeitverzögerung beim Starten durchaus Sinn machen. Wenn alle Maschinen im Abstand von einer Sekunde gestartet werden, rattert sich die arme Festplatte sonst tot.
Wir haben unsere Images auf einem Raid1 liegen und verzögern sogar um 45 Sekunden.
MFG
Nur wenn dieser Befehl hängen bleibt und nicht beendet, hast du ein Problem. Das ist dann aber vermutlich eh ein größeres.
Wir hatten in den letzten 4 Jahren damit keine Probleme.
Noch ein kleiner Tipp:
Falls die Images bei euch auch auf normalen HDDs liegen, kann eine Zeitverzögerung beim Starten durchaus Sinn machen. Wenn alle Maschinen im Abstand von einer Sekunde gestartet werden, rattert sich die arme Festplatte sonst tot.
Wir haben unsere Images auf einem Raid1 liegen und verzögern sogar um 45 Sekunden.
MFG
Zeile 5:
"while [ virsh domstate $i | grep laufend | awk -F " " '{print $1}' ] "
Falls das Ganze für ein Backup Script ist, kannst du dir auch "virsh suspend" und "virsh resume" ansehen. Das geht schneller als Runterfahren und Starten. Unsere VMs haben auch teilweise nicht auf den Shutdown-Befehl reagiert.
Aber das ist natürlich nicht ganz so sauber.
"while [ virsh domstate $i | grep laufend | awk -F " " '{print $1}' ] "
Falls das Ganze für ein Backup Script ist, kannst du dir auch "virsh suspend" und "virsh resume" ansehen. Das geht schneller als Runterfahren und Starten. Unsere VMs haben auch teilweise nicht auf den Shutdown-Befehl reagiert.
Aber das ist natürlich nicht ganz so sauber.