oiooiooioiioooiioiioiooo
Goto Top

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? face-smile

#!/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.

Content-ID: 337185

Url: https://administrator.de/contentid/337185

Printed on: December 10, 2024 at 08:12 o'clock

SlainteMhath
SlainteMhath May 09, 2017 at 08:04:17 (UTC)
Goto Top
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:

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
freeker
Solution freeker May 09, 2017 at 08:17:30 (UTC)
Goto Top
Hallo,

Versuch es mal damit:
if [ `grep -i gestartet ausgabe.txt | wc -l` != 1 ] 
then 
     echo Da stimmt was nicht 
fi

Und natürlich, wie schon gesagt, die Pfade richtig angeben oder am Anfang in ein Verzeichnis wechseln. Das kann dir viel Ärger sparen
OIOOIOOIOIIOOOIIOIIOIOOO
OIOOIOOIOIIOOOIIOIIOIOOO May 09, 2017 at 08:25:27 (UTC)
Goto Top
Danke für deine Antwort.

Danke die für deinen Hinweis. Werde den Pfad mit in die Contains einsetzen.

Zitat von @SlainteMhath:
funktioniert so nicht. Was soll "-2" bewirken? Meinst du evtl. "-n 2" (letzen Zwei ausgeben)?

Das waren meine Versuche aus Verzweiflung. face-smile Hier sollte nur die zweite Zeile von unten bewertet werden.

Also jetzt habe ich glaube ich dich falsch verstanden die Zeile habe ich eingebaut.

if [ "cat /tmp/vmlogtmp.txt | grep $DOMSTART" = "$DOMSTART" ]  

Funktioniert nicht.
OIOOIOOIOIIOOOIIOIIOIOOO
OIOOIOOIOIIOOOIIOIIOIOOO May 09, 2017 at 08:35:04 (UTC)
Goto Top
So funktioniert es mit Grep ohne Probleme. Sobald ich das aber in den Cript einsetze Zeigt es mir immer „nichts ist ok!“

Darum habe ich das mit dem Logfile Probiert. Aber auch hier habe ich bis jetzt keine Lösung gefunden.
SlainteMhath
SlainteMhath May 09, 2017 at 08:45:39 (UTC)
Goto Top
Entweder du nimmst mein Beispiel (und zwar ohne "IF")

cat /tmp/vmlog.txt | grep "$DOMSTART"  && echo alles ok!  

oder du nimmst den Code von @freeker - ein Mischung aus beiden klappt nicht .)
OIOOIOOIOIIOOOIIOIIOIOOO
OIOOIOOIOIIOOOIIOIIOIOOO May 09, 2017 at 08:59:59 (UTC)
Goto Top
Juhu der Code von "freeker" hat funktioniert!!! Ich habe einfach meine Kommentare drin behalten und diese waren in falsche Folge.

Deine Variante würde leider nicht reichen, denn es sollen dann weitere Prüfungen mit „Sonnst“ stattfinden…

Danke euch allen!

Andere Frage zur dem grep. Kann es eine Kette aus mehreren Wörtern nicht abgleichen? Denn so ähnlich war mein erste Script und da hat es nicht funktioniert.
freeker
freeker May 09, 2017 at 10:19:19 (UTC)
Goto Top
Mit grep kannst duch natürlich auch nach "Domain VM gestartet" suchen.
Die 0,3kcal hab ich mir gespart
OIOOIOOIOIIOOOIIOIIOIOOO
OIOOIOOIOIIOOOIIOIIOIOOO May 09, 2017 at 11:34:59 (UTC)
Goto Top
ok ich habe das 'wc -l' nicht angewandt.

Vielen Dank!