ubuntuusers.de

Skript für Festplattenbelegung

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

jenss

Anmeldungsdatum:
16. Januar 2009

Beiträge: 98

Hallo,

ich will auf meinem Server ein Skript schreiben, dass mir eine E-Mail schickt, wenn der verfügbare Speicherplatz unter 1G fällt. Ich habe aber das Problem, dass ich nicht weiss wie ich eine bestimmte Spalte ansprechen kann:

zeus@meinserver:~ df -h /
Filesystem            Size  Used Avail Use% Mounted on
/dev/simfs             10G  5.6G  3.3G  63% /

Ich will nun den Wert "Avail" vergleichen und dann eine Aktion auslösen.

Es wäre nett wenn mir jemand einen Hinweis geben könnte.

Gruss Jens

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

Im dümmsten Falle so:

1
df -h | awk '/^\/dev\/simfs/ {print $4}'

"In der Zeile, die mit /dev/simfs beginnt, drucke das vierte Feld."

Wobei du vielleicht besser das -h bei df weglässt, damit du das besser vergleichen kannst.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Hi Jens und Vain,

genau so hatte ich es auch erst angepackt. Aber df ist nur bedingt portabel, habe ich feststellen müssen.
Denn die Reihenfolge der Spalten von df kann unter einem anderen *nix auch mal anders sein.

Deshalb bin ich davon weg gekommen und mache es jetzt lieber mit stat: (fast genau so eine Sache wie mit ls ☺ )

platz=$(( $( stat -fc "%a * %s" ./ ) ))

(das multipliziert die Sektorgröße mit der freien Anzahl Sektoren, so ist es die am weitesten portable Lösung)

Ansonsten funktioniert der Vorschlag von Vain natürlich, solange man es nur auf einem Rechner (und Uby) laufen lässt.

track

Sid_Burn

Anmeldungsdatum:
23. Oktober 2004

Beiträge: 2159

Wenn du es Portabel haben möchtest dann wäre eine höhere Programmiersprache mit entsprechenden Modulen vielleicht angebrachter. Für perl gibt es Beispielsweise Sys::Statistics::Linux dazu gehört auch ein Modul womit du den festplattenverbrauch auslesen kannst.

Sys::Statistics::Linux::DiskUsage

diesch Team-Icon

Avatar von diesch

Anmeldungsdatum:
18. Februar 2009

Beiträge: 5072

Wohnort: Brandenburg an der Havel

stat ist weniger portabel als df, da es im Gegensatz zu df nicht von SUS/POSIX vorausgesetzt wird (die Ausgabe von df ist aber nicht standardisiert).

Die Lösung von vain funktioniert meiner Erfahrung nach recht häufig.

Wenn du wirklich portabel sein willst, musst du ein POSIX-konformes C-Programm schreiben, das du auf der Zielplatform mit c99 kompilierst.

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4695

Wohnort: Berlin

Wenn die Ausgabe von df nicht standardisiert ist, wieso gibt es dann die Option -P!?

!vorlage Befehl
bj@s8n:~$ df --help
Usage: df [OPTION]... [FILE]...
Show information about the file system on which each FILE resides,
or all file systems by default.

Mandatory arguments to long options are mandatory for short options too.
  -a, --all             include dummy file systems
  -B, --block-size=SIZE use SIZE-byte blocks
  -h, --human-readable  print sizes in human readable format (e.g., 1K 234M 2G)
  -H, --si              likewise, but use powers of 1000 not 1024
  -i, --inodes          list inode information instead of block usage
  -k                    like --block-size=1K
  -l, --local           limit listing to local file systems
      --no-sync         do not invoke sync before getting usage info (default)
  -P, --portability     use the POSIX output format
      --sync            invoke sync before getting usage info
  -t, --type=TYPE       limit listing to file systems of type TYPE
  -T, --print-type      print file system type
  -x, --exclude-type=TYPE   limit listing to file systems not of type TYPE
  -v                    (ignored)
      --help     display this help and exit
      --version  output version information and exit

SIZE may be (or may be an integer optionally followed by) one of following:
kB 1000, K 1024, MB 1000*1000, M 1024*1024, and so on for G, T, P, E, Z, Y.

Report bugs to <bug-coreutils@gnu.org>.

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

@diesch: Die Ausgabe von df ist standardisiert.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Marc 'BlackJack' Rintsch schrieb:

Wenn die Ausgabe von df nicht standardisiert ist, wieso gibt es dann die Option -P!?

Das kann ich Dir auch nicht verraten. Fakt ist jedoch dass ein df -P bei Uby dies auswirft:

track@ubuntu:~$ df -P
Dateisystem         1024-Blöcke   Benutzt Verfügbar Kapazit. Eingehängt auf
/dev/sda2             69171956  64648888   1712016      98% /
varrun                  647932       112    647820       1% /var/run
varlock                 647932         0    647932       0% /var/lock
procbususb              647932       112    647820       1% /proc/bus/usb
udev                    647932       112    647820       1% /dev
devshm                  647932         0    647932       0% /dev/shm
lrm                     647932     33788    614144       6% /lib/modules/2.6.24-27-generic/volatile

und bei Red Hat V.9 dies:

root@adamed:~# df -P
Mount Dir  Filesystem          512-blocks      Used Available  Capacity
/          /dev/hdb3              8254216   5156352   2678568      66%
/boot      /dev/hdb1               202178     16994    174746       9%
/dev/shm   none                   3355616         0   3355616       0%
/usr/adamed /dev/hdb2             8254216   5240088   2594832      67%

Da steht der "verfügbare Platz" dann in Spalte 5 statt in Spalte 4.

Option "-P" hin oder her, damit geht jeder Filter der einfach nur ein Feld auswählt ins Leere, während

platz=$(( $( stat -fc "%a * %s" ./ ) ))

sauber funktioniert.

track


p.s.: Auch wenn stat (1) nicht zum POSIX-Standard gehört, dann aber doch die dahinter liegende Funktion stat (2) und statvfs (2), wenigstens seit 2001: http://www.kernel.org/doc/man-pages/online/pages/man2/stat.2.html / http://www.kernel.org/doc/man-pages/online/pages/man2/statvfs.2.html

Antworten |