Mail wenn HD-platz knapp - oder wie Zahl extrahieren?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
badera
Beiträge: 643
Registriert: 20.05.2004 20:01:50
Wohnort: Schweiz

Mail wenn HD-platz knapp - oder wie Zahl extrahieren?

Beitrag von badera » 13.09.2007 11:30:00

Ich möchte erreichen, dass mir mein Server eine EMail schickt, wenn der Festplattenplatz auf dem Backup-Laufwerk voll ist.
Vielleicht gibt es dazu fertige Tools??

Da mir nichts bekannt ist, wollte ich ein Skript dazu schreiben, das ich via crontab täglich aufrufen würde.
Die Idee wäre es, mit

Code: Alles auswählen

df -h | grep /mnt/backup
die Zeile mit den Platz-angaben auszulesen. Das gibt dann z.B.

Code: Alles auswählen

                      367G  319G   44G  88% /mnt/backup
zurück.

Nun möchte ich die Zahl 88 vor dem Prozentzeichen extrahieren und wenn > 95 eine Mail verschicken.
Das Problem, das ich habe ist es, die 88 zu extrahieren. Eigentlich möchte ich einfach die ersten x-Zeichen im String löschen und alles nach der Zahl löschen. Wie mach ich das mit einem Bash-Script? mit SED?

Besten Dank schon für Eure Hilfe!
- Adrian

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 13.09.2007 11:41:13

so sollte das funktionieren:

Code: Alles auswählen

gms2 ~ # VAL=$(df | awk '/\/mnt\/backup/{sub(/%/,"",$5); print $5}')
gms2 ~ # echo $VAL
11
Gruß
gms

Benutzeravatar
badera
Beiträge: 643
Registriert: 20.05.2004 20:01:50
Wohnort: Schweiz

Beitrag von badera » 13.09.2007 12:33:39

Besten Dank, gms, für die rasche Antwort.
Es klappt zwar nicht ganz; bei mir wird

Code: Alles auswählen

/mnt/backup
ausgegeben. Jedoch kannte ich awk noch nicht; also kann ich mal die Doku zu awk studieren. Vielleicht finde ich es ja selbst heraus.
- Adrian

Benutzeravatar
badera
Beiträge: 643
Registriert: 20.05.2004 20:01:50
Wohnort: Schweiz

Beitrag von badera » 13.09.2007 13:11:24

awk scheint recht gut zu sein 8O

so klappts auch bei mir:

Code: Alles auswählen

user@server:~# val=$(df | grep /mnt/backup | awk '{print substr($0,index($0, "%")-3, 3)}' | awk '{print $1}')
user@server:~# echo $val
88
Besten Dank für die Hilfe!
- Adrian

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 13.09.2007 14:16:01

meine Version funktioniert wahrscheinlich bei dir nicht, weil bei dir die erste Spalte ( Devicename ) zu lang ist, und dadurch umgebrochen wird. Du hättest also nur $5 durch $4 vertauschen müssen, bzw unter Einsatz von "substr" schaut das dann so aus:

Code: Alles auswählen

VAL=$(df | awk '/\/mnt\/backup/{$4=substr($4,0,length($4)-1);print $4}')
Nachdem du wahrscheinlich nicht daran denken wirst, wenn sich der Devicename dieser Partition einmal verkürzt, daß du dein Script anpassen mußt, würde ich dir aber folgendes empfehlen:

Code: Alles auswählen

VAL=$(df -P | awk '/\/mnt\/backup/{$5=substr($5,0,length($5)-1);print $5}')
Im Posix Ausgabeformat werden keine Zeilenumbrüche eingefügt, der gesuchte Wert befindet sich also immer in der 5ten Spalte

Gruß
gms

Benutzeravatar
badera
Beiträge: 643
Registriert: 20.05.2004 20:01:50
Wohnort: Schweiz

Beitrag von badera » 13.09.2007 14:39:29

Ja, genau, bei mir ist die Spalte "Filesystem" zu kurz, deshalb hats nen Zeilenumbruch gegeben, und deshalb stimmt die Feld-Nummer nicht überein.
Deine Lösung gefällt mir gut. Besten Dank für die supper Hilfe!
- Adrian

Antworten