Ausgabe mit IF auswerten
Moin,
ich versuche dachte ich eine einfache IF Schleife nach CASE einzubauen.
Meine Absicht ist es eine E-Mail zu erhalten, wenn eine VM aus welchen Grund auch immer nicht gestartet ist.
Nach dem Befehl „virsh start VM“ kommt beim erfolgreichem Starten die Aussage „ Domain VM gestartet“ wenn nichts gestartet wurde, da die VM bereits online ist kommt nichts. Und wenn die IMG nicht nicht an dem erwartetem Ort sich befindet dann „Fehler: Domain VM konnte nicht gestartet werden
Fehler: Cannot access storage file '/data/vm-images/VM.img' (as uid:1000, gid:1000): Datei oder Verzeichnis nicht gefunden“
Alle Möglichkeiten möchte ich in eine Logdatei einbauen, was glaube ich das kleinste Problem ist. Mein Problem ist ich bekomme es nicht hin, dass die Aussage „Domain $i gestartet“ in die Auswertung für die IF Schleife genommen wird.
Ich habe es einfach mit der Ausgabe probiert ich habe es mit der Auswertung der Logdatei probiert … Ich habe keine Ideen mehr. Habt ihr eine Idee was ich falsch mache, außer das ich den Rechner angemacht habe?
P.S. String contains werde ich einbauen, wenn ich den Script feritg hab.
ich versuche dachte ich eine einfache IF Schleife nach CASE einzubauen.
Meine Absicht ist es eine E-Mail zu erhalten, wenn eine VM aus welchen Grund auch immer nicht gestartet ist.
Nach dem Befehl „virsh start VM“ kommt beim erfolgreichem Starten die Aussage „ Domain VM gestartet“ wenn nichts gestartet wurde, da die VM bereits online ist kommt nichts. Und wenn die IMG nicht nicht an dem erwartetem Ort sich befindet dann „Fehler: Domain VM konnte nicht gestartet werden
Fehler: Cannot access storage file '/data/vm-images/VM.img' (as uid:1000, gid:1000): Datei oder Verzeichnis nicht gefunden“
Alle Möglichkeiten möchte ich in eine Logdatei einbauen, was glaube ich das kleinste Problem ist. Mein Problem ist ich bekomme es nicht hin, dass die Aussage „Domain $i gestartet“ in die Auswertung für die IF Schleife genommen wird.
Ich habe es einfach mit der Ausgabe probiert ich habe es mit der Auswertung der Logdatei probiert … Ich habe keine Ideen mehr. Habt ihr eine Idee was ich falsch mache, außer das ich den Rechner angemacht habe?
#!/bin/sh
case $1 in
start)
for i in $(virsh list --all | grep 'ausschalten' | awk -F " " '{print $2}')
do
DOMSTART="Domain $i gestartet"
echo `date +%a` `date +%d.%m.%Y-%H:%M:%S` > zeit.txt
virsh start $i > ausgabe.txt
cat zeit.txt ausgabe.txt >> vmlog.txt # Log erstellen
sed -i '$d' vmlog.txt
tail -2 vmlog.txt
if [ tail -2 vmlog.txt = "$DOMSTART" ]
then
echo $i ist alles ok!
else
echo $i nichts ist ok!
fi &
done
;;
stop)
for i in $(virsh list | grep laufend | awk -F " " '{print $2}')
do
virsh shutdown $i | sleep 60 &
if [ $? -eq 0 ]
then
echo $i wurde heruntergefahren alles ok!
else
echo $i kann nicht, nichts ist ok!
fi
done
;;
*) echo "bitte start oder stop benutzen!"
;;
esac
P.S. String contains werde ich einbauen, wenn ich den Script feritg hab.
Please also mark the comments that contributed to the solution of the article
Content-ID: 337185
Url: https://administrator.de/contentid/337185
Printed on: December 10, 2024 at 08:12 o'clock
8 Comments
Latest comment
Moin,
generell zu (Ba)sh-Scripten die als root laufen:
Immer (!!) absulote Pfade verwenden. Bei Executaboles wie auch bei Ein- und Ausgabe-Files. Oder am Anfang des Scripts den Path selbst festlegen.
Zu deinem Problem:
funktioniert so nicht. Was soll "-2" bewirken? Meinst du evtl. "-n 2" (letzen Zwei ausgeben)?
Das ganz muss in Backticks - ich würde das aber eher so lösen:
l,g
Slainte
generell zu (Ba)sh-Scripten die als root laufen:
Immer (!!) absulote Pfade verwenden. Bei Executaboles wie auch bei Ein- und Ausgabe-Files. Oder am Anfang des Scripts den Path selbst festlegen.
Zu deinem Problem:
if [ tail -2 vmlog.txt = "$DOMSTART" ] ...
funktioniert so nicht. Was soll "-2" bewirken? Meinst du evtl. "-n 2" (letzen Zwei ausgeben)?
Das ganz muss in Backticks - ich würde das aber eher so lösen:
cat /tmp/vmlog.txt | grep "$DOMSTART" && echo alles ok!
l,g
Slainte
Entweder du nimmst mein Beispiel (und zwar ohne "IF")
oder du nimmst den Code von @freeker - ein Mischung aus beiden klappt nicht .)
cat /tmp/vmlog.txt | grep "$DOMSTART" && echo alles ok!
oder du nimmst den Code von @freeker - ein Mischung aus beiden klappt nicht .)