Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
Quickly1971
- Beiträge: 110
- Registriert: 08.05.2009 15:26:32
Beitrag
von Quickly1971 » 04.02.2018 17:30:26
Hallo Leute.
Ich bin gerade echt am verzweifeln. Ich möchte mit meinem Zabbix einen LSI Controller überwachen. Da komme ich nicht weiter. Ich suche einen
Einzeiler.
Ich bin gehkommen bis...
Eingabe:
Code: Alles auswählen
/usr/sbin/megacli -AdpBbuCmd -a0|grep "Battery State"|head -n1|cut -d ":" -f 2|tr -d " "
Ausgabe:
Das
(NeedAttention) muss weg. Darf nur noch sein
Degraded.
Basisbefehl:
Ausgabe:
Optional, keine Ahnung ob und wie das gehen soll, ich schreibe mal so los:
Wenn Ausgabe enthällt "Good", dann Wert "0".
Wenn das Wort "Good" nicht enthalten, dann Wert "1" (also irgend ein anderes Wort/Wert).
Wäre für Hilfe dankbar. Und es muss ein Einzeler sein.
Vielen Dank, Lars
Der Mensch hat drei Wege, klug zu werden.
Erstens durch Nachdenken: Das ist der edelste.
Zweitens durch Nachahmen: Das ist der leichteste.
Drittens durch Erfahrung: Das ist der bitterste.
-
inne
- Beiträge: 3289
- Registriert: 29.06.2013 17:32:10
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Beitrag
von inne » 04.02.2018 18:02:10
Hallo,
wie schaut denn die Ausgabe von
/usr/sbin/megacli -AdpBbuCmd -a0 ohne alle Filter aus? Vlt. gibt es bessere Lösungsansätze z.B. AWK.
Quickly1971 hat geschrieben: 04.02.2018 17:30:26
Eingabe:
Code: Alles auswählen
/usr/sbin/megacli -AdpBbuCmd -a0|grep "Battery State"|head -n1|cut -d ":" -f 2|tr -d " "
Ausgabe:
Das
(NeedAttention) muss weg. Darf nur noch sein
Degraded.
Ist da wirklich kein Leerzeichen zwischen?
Code: Alles auswählen
$ echo "Degraded(Need Attention)" | sed 's/(.*)//'
Degraded
Zum optionalen Teil:
Code: Alles auswählen
echo "Good" | gawk 'BEGIN{foo="0"} END{print foo} /Good/ {foo="1"}'
1
Zuletzt geändert von Anonymous am 04.02.2018 18:08:34, insgesamt 2-mal geändert.
-
Meillo
- Moderator
- Beiträge: 9228
- Registriert: 21.06.2005 14:55:06
- Wohnort: Balmora
-
Kontaktdaten:
Beitrag
von Meillo » 04.02.2018 20:26:18
Quickly1971 hat geschrieben: 04.02.2018 17:30:26
Eingabe:
Code: Alles auswählen
/usr/sbin/megacli -AdpBbuCmd -a0|grep "Battery State"|head -n1|cut -d ":" -f 2|tr -d " "
Ausgabe:
Code: Alles auswählen
/usr/sbin/megacli -AdpBbuCmd -a0 | sed -n '/^Battery State: /{s///;s/(.*//;p;q}'
Optional, keine Ahnung ob und wie das gehen soll, ich schreibe mal so los:
Wenn Ausgabe enthällt "Good", dann Wert "0".
Wenn das Wort "Good" nicht enthalten, dann Wert "1" (also irgend ein anderes Wort/Wert).
Was meinst du mit ``Ausgabe''? ... doch wohl eher den Exitcode und nicht die Textausgabe? Faende ich sonst naemlich recht seltsam und unueblich.
Falls es um den Exitcode geht, dann schreibst du an's Ende der Pipeline einfach noch diesen Befehl von inne hin:
Use ed once in a while!
-
Quickly1971
- Beiträge: 110
- Registriert: 08.05.2009 15:26:32
Beitrag
von Quickly1971 » 04.02.2018 21:42:37
Hallo.
Bin gerade wieder rein gekommen. Erst mal vielen Dank. Ich werde es in den nächsten 2 Tagen testen. Hoffe ich komme zum Erfolg.
Weiterhin:
wie schaut denn die Ausgabe von /usr/sbin/megacli -AdpBbuCmd -a0 ohne alle Filter aus? Vlt. gibt es bessere Lösungsansätze z.B. AWK.
Code: Alles auswählen
root@proxmox1:~# /usr/sbin/megacli -AdpBbuCmd -a0
BBU status for Adapter: 0
BatteryType: iBBU
Voltage: 4013 mV
Current: 0 mA
Temperature: 25 C
Battery State: Degraded(Need Attention)
A manual learn is required.
BBU Firmware Status:
Charging Status : None
Voltage : OK
Temperature : OK
Learn Cycle Requested : Yes
Learn Cycle Active : No
Learn Cycle Status : OK
Learn Cycle Timeout : No
I2c Errors Detected : No
Battery Pack Missing : No
Battery Replacement required : No
Remaining Capacity Low : No
Periodic Learn Required : No
Transparent Learn : No
No space to cache offload : No
Pack is about to fail & should be replaced : No
Cache Offload premium feature required : No
Module microcode update required : No
GasGuageStatus:
Fully Discharged : No
Fully Charged : No
Discharging : Yes
Initialized : Yes
Remaining Time Alarm : No
Discharge Terminated : No
Over Temperature : No
Charging Terminated : No
Over Charged : No
Relative State of Charge: 79 %
Charger System State: 49169
Charger System Ctrl: 0
Charging current: 512 mA
Absolute state of charge: 80 %
Max Error: 9 %
Battery backup charge time : 48 hours +
BBU Capacity Info for Adapter: 0
Relative State of Charge: 79 %
Absolute State of charge: 80 %
Remaining Capacity: 976 mAh
Full Charge Capacity: 1239 mAh
Run time to empty: Battery is not being charged.
Average time to empty: Battery is not being charged.
Estimated Time to full recharge: Battery is not being charged.
Cycle Count: 32
Max Error = 9 %
Remaining Capacity Alarm = 120 mAh
Remining Time Alarm = 10 Min
BBU Design Info for Adapter: 0
Date of Manufacture: 01/08, 2014
Design Capacity: 1215 mAh
Design Voltage: 3700 mV
Specification Info: 33
Serial Number: 811
Pack Stat Configuration: 0x6490
Manufacture Name: LS1191002A
Firmware Version :
Device Name: 3150302
Device Chemistry: LION
Battery FRU: N/A
Transparent Learn = 0
App Data = 0
BBU Properties for Adapter: 0
Auto Learn Period: 28 Days
Next Learn time: Sat Feb 10 01:00:00 2018
Learn Delay Interval:167 Hours
Auto-Learn Mode: Enabled
Exit Code: 0x00
Der Mensch hat drei Wege, klug zu werden.
Erstens durch Nachdenken: Das ist der edelste.
Zweitens durch Nachahmen: Das ist der leichteste.
Drittens durch Erfahrung: Das ist der bitterste.
-
inne
- Beiträge: 3289
- Registriert: 29.06.2013 17:32:10
- Lizenz eigener Beiträge: GNU General Public License
-
Kontaktdaten:
Beitrag
von inne » 04.02.2018 21:57:55
Meillos sed passt ja.
Was macht denn das s///?
(Das p gibt nur die betreffenden Zeilen/Musterbereich aus – ähnlich einem grep und q beendet das Skript nach dem ersten Match – Richtig?)
-
Quickly1971
- Beiträge: 110
- Registriert: 08.05.2009 15:26:32
Beitrag
von Quickly1971 » 04.02.2018 22:07:50
Hi inne.
Wollte zwar ins Bett... hänge jedoch fastziniert an Euren Befehlen.
Befehl:
Code: Alles auswählen
/usr/sbin/megacli -AdpBbuCmd -a0 | sed -n '/^Battery State: /{s///;s/(.*//;p;q}'
Ausgabe:
Das schon mal perfekt.
Vermutlich bin ich auch gerade zu belämmert (Hatte Stammtisch
). Keine Sorge... nur Testserver.
Wenn das mit meinem optionalen Wunsch echt gehen sollte... ich bekomme es nicht hin.
Die Ausgabe sollte 0 sein, wenn Ergebnis der Abfrage "Good" enthält.
Bin ich zu blöde zu. Bekomme ich nicht hin.
Der Mensch hat drei Wege, klug zu werden.
Erstens durch Nachdenken: Das ist der edelste.
Zweitens durch Nachahmen: Das ist der leichteste.
Drittens durch Erfahrung: Das ist der bitterste.
-
Quickly1971
- Beiträge: 110
- Registriert: 08.05.2009 15:26:32
Beitrag
von Quickly1971 » 04.02.2018 22:37:16
So, jetzt aber... das geht.
... denke ich.
Der Status von BBU ist zur Zeit = Degraded
Code: Alles auswählen
/usr/sbin/megacli -AdpBbuCmd -a0|grep "Battery State"|head -n1|cut -d ":" -f 2|tr -d " "| sed 's/(.*)//'| grep -q Good && echo 0 || echo 1
Ausgabe = 1
Gegenprobe:
Code: Alles auswählen
/usr/sbin/megacli -AdpBbuCmd -a0|grep "Battery State"|head -n1|cut -d ":" -f 2|tr -d " "| sed 's/(.*)//'| grep -q Degraded && echo 0 || echo 1
Ausgabe = 1
Also kann ich für mein Zabbix nehmen:
Code: Alles auswählen
system.run[/usr/sbin/megacli -AdpBbuCmd -a0|grep "Battery State"|head -n1|cut -d ":" -f 2|tr -d " "| sed 's/(.*)//'| grep -q Good && echo 0 || echo 1]
Könnt Ihr das so bestätigen?
Der Mensch hat drei Wege, klug zu werden.
Erstens durch Nachdenken: Das ist der edelste.
Zweitens durch Nachahmen: Das ist der leichteste.
Drittens durch Erfahrung: Das ist der bitterste.
-
Quickly1971
- Beiträge: 110
- Registriert: 08.05.2009 15:26:32
Beitrag
von Quickly1971 » 04.02.2018 23:27:29
Und hätte ich Esel nicht mit dem schwern Teil vom Script angefangen, dann hätte ich auch ablesen können
Code: Alles auswählen
/usr/sbin/megacli -AdpBbuCmd -a0|grep "Battery State"|grep -vc Good
Ausgabe = 0
Der Mensch hat drei Wege, klug zu werden.
Erstens durch Nachdenken: Das ist der edelste.
Zweitens durch Nachahmen: Das ist der leichteste.
Drittens durch Erfahrung: Das ist der bitterste.
-
Meillo
- Moderator
- Beiträge: 9228
- Registriert: 21.06.2005 14:55:06
- Wohnort: Balmora
-
Kontaktdaten:
Beitrag
von Meillo » 05.02.2018 06:50:16
inne hat geschrieben: 04.02.2018 21:57:55
Was macht denn das s///?
Es ersetzt die zuletzt verwendete RegExp durch den leeren String.
(Das p gibt nur die betreffenden Zeilen/Musterbereich aus – ähnlich einem grep und q beendet das Skript nach dem ersten Match – Richtig?)
`p' gibt den aktuellen Pattern-Space aus ... das ist ungefaehr das was du meinst.
`q':
Immediately quit the sed script without processing any
more input, except that if auto-print is not disabled
the current pattern space will be printed.
Da hier, mittels `-n', auto-print deaktiviert ist, wird das Script nach `q' sofort beendet.
@Quickly1971: `grep -vc' zu verwenden ist clever.
Use ed once in a while!
-
heisenberg
- Beiträge: 4123
- Registriert: 04.06.2015 01:17:27
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von heisenberg » 22.03.2018 19:34:58
Code: Alles auswählen
/usr/sbin/megacli -AdpBbuCmd -a0|grep "Battery State"|grep -vc Good
Der da geht auch:
Code: Alles auswählen
/usr/sbin/megacli -AdpBbuCmd -a0|grep -qi "Battery State.*good" ; echo $?