Hallo Leute, heute ( in der CLE10 update Prüfung ) war eine Aufgabe, den belegten Platz auf einem Volume zu überwachen und bei Überschreitung von 80% belegtem Platz eine Warnmail mit definiertem Inhalt zu versenden. Das ganze sollte in einem shell-script erfolgen, welches per cron zu bestimmten Zeiten aufgerufen wird. Das mit der Mail und dem cron war noch das kleinste Übel. Wie kann ich aber vernünftig den belegten Platz in Prozent ermitteln und in einem script auswerten ? Mein Ansatz die Ausgabe von du zu filtern und an das script zu übergeben waren nicht so der Hit, da fehlte irgendwann die Zeit ;-) Wie kann man sowas am einfachsten ( möglichst ohne regexp ) anstellen ( habe da momentan ein Brett vorm Kopf )?
Grüße Thomas
Am 10.07.07 schrieb Thomas Mueller tmueller@itm-meissen.de:
Hallo Leute, heute ( in der CLE10 update Prüfung ) war eine Aufgabe, den belegten Platz auf einem Volume zu überwachen und bei Überschreitung von 80% belegtem Platz eine Warnmail mit definiertem Inhalt zu versenden.
Wie kann ich aber vernünftig den belegten Platz in Prozent ermitteln und in einem script auswerten ? Mein Ansatz die Ausgabe von du zu filtern und an das script zu übergeben waren nicht so der Hit, da fehlte irgendwann die Zeit ;-) Wie kann man sowas am einfachsten ( möglichst ohne regexp ) anstellen ( habe da momentan ein Brett vorm Kopf )?
so aus der hohlen Hand:
df | awk '{print $5}'
Grüße Thomas
Grüße Robert
Am Dienstag, den 10.07.2007, 21:32 +0200 schrieb Robert Müller:
Am 10.07.07 schrieb Thomas Mueller tmueller@itm-meissen.de:
Wie kann man sowas am einfachsten ( möglichst ohne regexp ) anstellen ( habe da momentan ein Brett vorm Kopf )?
df | awk '{print $5}'
Danke Robert für den Schubs in die richtige Richtung. Mit df und awk habe ich es jetzt hinbekommen. Falls es Euch interessiert:
#!/bin/sh echo '80' > limit df /homelocal | tail -n1 | awk '{print $5}' > percent cut -c -1 < percent > load read limit < limit; read load < load if [ $load -lt $limit ]; then echo "Limit nicht erreicht" else echo "Limit erreicht" fi
Also danke an alle die sich dem Thema so kurzfristig angenommen haben.
Viele Grüße Thomas
On 11.07.07 Thomas Mueller (tmueller@itm-meissen.de) wrote:
Moin,
Mit df und awk habe ich es jetzt hinbekommen. Falls es Euch interessiert:
Also irgendwie habe ich Magenkrämpfe gekriegt, also ich diesen Shellschnipsel gesehen habe.
#!/bin/sh echo '80' > limit
1. Wieso legst Du temporäre Files an, die Du sowieso nur einmal brauchst? Weise diesen Wert einer Variablen zu.
df /homelocal | tail -n1 | awk '{print $5}' > percent cut -c -1 < percent > load
Diese Zeile kann man in eine schreiben. Spart ein temporäres File/eine Variable.
read limit < limit; read load < load
Mit Variablen wäre das nicht passiert.
if [ $load -lt $limit ]; then echo "Limit nicht erreicht" else echo "Limit erreicht" fi
also so:
#!/bin/sh
limit=80 load=`df /home | tail -n1 | awk '{print $5}'|cut -c -1`
if [ $load -lt $limit ]; then echo "Limit nicht erreicht" else echo "Limit erreicht" fi
Ob da jetzt bashisms drin sin, weiß ich nicht. Ich vermute aber, daß /bin/sh auf /bin/bash zeigt. Im Übrigen bin ich mir nicht sicher, ob Du das "cut -c -1" am Ende wirklich willst. Bei einem zweistelligen Wert wird einfach die zweite Stelle abgeschnitten.... Die Overkill-Methode zum Entfernen des % wäre "sed s/%//".
H.
Nitpick:
On Thursday 12 July 2007 09:44:35 Hilmar Preusse wrote:
Ob da jetzt bashisms drin sin, weiß ich nicht. Ich vermute aber, daß /bin/sh auf /bin/bash zeigt.
Nicht vermuten, sondern explizit /bin/bash hineinschreiben, wenn man Bash-Entwicklung betreibt. Eine Bash auf irgendeinem System ist schneller installiert als wie man ein möglichst POSIX-kompatibles sh-Skript mit allerlei Workarounds mangels modernen Konstrukten debuggen kann.
Josef
Hi Josef,
On Thu, Jul 12, 2007 at 10:22:52 +0200, Josef Spillner wrote:
Ich vermute aber, dass /bin/sh auf /bin/bash zeigt.
Nicht vermuten, sondern explizit /bin/bash hineinschreiben, wenn man Bash-Entwicklung betreibt. Eine Bash auf irgendeinem System ist schneller
Mit Hilmars Vermutung wuerde man bei Ubuntu Edgy Eft und Feisty Fawn auf die Nase fallen. Dort ist /bin/sh ein Symlink auf /bin/dash, also die Debian Almquist Shell. Wenn man der dash mit irgendwelchen Bashismen kommt, faengt sie an zu heulen und schliesst sich auf dem Klo ein. Die Bash ist selbstverstaendlich auch installiert, ist aber mehr als Login-Shell gedacht, oder eben fuer #!/bin/bash-Skripte.
Gruss, Chris
Danke für die konstruktive Kritik, ich muss relativ selten shell scripts schreiben und kam bei den paar Dingern halt immer mit den temp files ganz gut aus. Geht natürlich eleganter, stimmt schon. So wäre es doch ok oder ? : #!/bin/bash limit=20 load=`df /home | tail -n1 | awk '{print $5}' | sed s/%//` if [ $load -lt $limit ]; then echo "limit nicht erreicht, denn: limit="$limit "load="$load else echo "limit erreicht, denn: limit="$limit "load="$load fi
Am Donnerstag, den 12.07.2007, 09:44 +0200 schrieb Hilmar Preusse:
On 11.07.07 Thomas Mueller (tmueller@itm-meissen.de) wrote:
Moin,
Also irgendwie habe ich Magenkrämpfe gekriegt, also ich diesen Shellschnipsel gesehen habe.
Hi Thomas,
On Tue, Jul 10, 2007 at 21:04:31 +0200, Thomas Mueller wrote:
heute ( in der CLE10 update Pruefung ) war eine Aufgabe, den belegten Platz auf einem Volume zu ueberwachen und bei Ueberschreitung von 80% belegtem Platz eine Warnmail mit definiertem Inhalt zu versenden. Das ganze sollte in einem shell-script erfolgen, welches per cron zu bestimmten Zeiten aufgerufen wird.
Du willst nicht "du", sondern "df" verwenden.
Wie kann man sowas am einfachsten ( moeglichst ohne regexp ) anstellen ( habe da momentan ein Brett vorm Kopf )?
p=`LANG=C df /home/images | tail -n +2` set -- $p echo $5
Gruss, Chris
Hi Thomas,
On 7/10/07, Thomas Mueller tmueller@itm-meissen.de wrote:
Wie kann ich aber vernünftig den belegten Platz in Prozent ermitteln und in einem script auswerten ? Mein Ansatz die Ausgabe von du zu filtern und an das script zu übergeben waren nicht so der Hit, da fehlte irgendwann die Zeit ;-) Wie kann man sowas am einfachsten ( möglichst ohne regexp ) anstellen ( habe da momentan ein Brett vorm Kopf )?
df -P . | awk 'NR==2 {print $5}'
Viele Grüße, Torsten
lug-dd@mailman.schlittermann.de