Tool um Diskspace zu überwachen

Nemesis

Nemesis

N3RD
Hi,
ich möchte gerne, dass wenn der freiePlatz auf meiner Platte ein gewisses Minimum unterschreitet, dass dann ein Shell-Script ausgeführt wird.
Das Problem daran ist, wie komme ich an den freien Speicher ?
Code:
df -h
gibt mir schon den freien Speicher jeder Partition aus, aber eben auch noch ne Menge anderer Infos dazu, dann müsste ich mich mit grep und cut zum gewünschten Wert durchhangeln.
Gibts da nicht nen einfacheren Weg ?


THX!
 
Schittebön:
Code:
BEGIN {
    errors=0
    space_limit=20
    percentage_limit=10
}

NR > 1 {
    if ( $3 > 0 ) {
        if ( ($5/$3*100 < percentage_limit) && ($5/1024 <= space_limit) ) {
            errors+=1
            msg[errors] = sprintf( "%s: %i%% auf %s verfügbar (%i MB)", $1,$5/$3*100,$7,$5)
        }
    }
}

END {
    if ( errors > 0) {
        print "WARNUNG:"
        print "========"
        print ""
        printf "Auf den folgenden Dateisystemen steht weniger als %i%% des Speicherplatzes bzw. weniger als %i GB zur Verfügung:\n",percentage_limit, space_limit
        for (x=1; x<=errors; x++)
            print "  - " msg[x]
        print ""
        printf "Diese Warnung wird wiederholt bis der verfügbare Speicherplatz wieder\nmehr als %i%% bzw. %i GB erreicht!\n\n",percentage_limit,space_limit
        print ""
        print "Viele Grüße,"
        print "ASMS - Automatisches Server Monitoring System"
    }
}

EDIT: Aufruf:
In der Crontab:
Code:
*/5 * * * * /bin/df -mlPT | /usr/bin/awk -f df.awk
Ist für GNU/Linux geschrieben. Der cronuser bekommt automatisch eine Mail wenn sowohl die Prozentgrenze als auch die absolute Grenze überschritten sind.
 
Zuletzt bearbeitet:
hm, ok, aber woher weiss ich jetzt als welcher parameter der gewünschte Wert übergeben wird.
ich habe folgendes vorliegen:
Code:
 df -mlPT | grep /dev/md0
/dev/md0      ext3         921999    742812    [COLOR="Red"]132352[/COLOR]      85% /
und nun muss ich irgendwie an diesen Wert kommen, wenn ich die Ausgabe aber durch eine pipe an awk übergebe, wird doch nicht alles was durch TAB getrennt ist als Parameter übergeben, oder ?
 
Also, in meinem Post ist der 1. Codeblock ein AWK-Skript, der 2. ist der dazu passende Aufruf. Das awk Skript überwacht alle gemounteten Partitionen und generiert eine Meldung sobald auf einer der Partitionen der freie Speicherplatz unterhalb der im Begin Block festgelegten Limits fällt. (Percentage_limit ist Prozent des freien Platzes, space_limit ist das absolute Limit in Gigabytes)

EDIT: Kannst du awk? Verstehst du das Skript? Wenn du nur md0 überwachen willst, dann kannst du das auch so aufrufen:
Code:
df -mlPT | grep /dev/md0 | awk -f [i]nameDesSkriptes.awk[/i]
Dann muss aber im Skript "NR > 1" durch "NR >= 1" ersetzt werden
 
Zuletzt bearbeitet:
ja das habe ich gesehen, aber wie erfolgt die Parameterübergabe? ich bräuchte dann ja lediglich $3 aus dem awk script, und es würde auch genügen diesen auf seine grösse zu prüfen, aber wie kommt awk an die richtige spalte bei der df ausgabe ?
 
Hmm, also es gibt verschiedene Möglichkeiten, awk arbeitet standardmäßig mit TAB als Feldtrenner und $1, $2, ... beziehen sich auf das jeweilige Feld der aktuellen Zeile.
Es sind also keine Parameter. Man müsste das ganze auch rel. einfach mit einer Kombination aus df | grep | cut erreichen können, wenn du nur eine einzige Zeile bearbeitest bzw. alternativ auch mittels einer while Schleife für mehrere Zeilen..
 
ja, mit cut hatte ich das bislang, aber as will nicht so richtig.
Code:
~$ df -mlPT | grep /dev/md0 | cut -f1
/dev/md0      ext3         921999    742812    132352      85% /
~$ df -mlPT | grep /dev/md0 | cut -f4
/dev/md0      ext3         921999    742812    132352      85% /
sieht aus als würde er die Trennung zwischen den Feldern nicht erkennen.
 
hmm, stimmt.. Jetzt merke ich es auch. Dann benutze doch meinen Vorschlag von weiter oben, mit der Änderung auf NR >= 1 oder einfach mein komplettes Originalskript, dann hast du eine Überwachung für alle Partitionen..
 
ich brauch eben nur die überwachung einer partition ;)

mit awk kenne ich mich nicht aus, ist es möglich das script wie folgt anzupassen:
Code:
BEGIN {
    errors=0
    space_limit=20
    percentage_limit=10
}

NR >= 1 {
    if ( $3 > 0 ) {
        if ( ($5/$3*100 < percentage_limit) && ($5/1024 <= space_limit) ) {
            errors+=1}
    }
}

END {
    if ( errors > 0) {
       UND HIER DANN WAS PASSIEREN SOLL
    }
}

lässt sich das auch ohne awk-file realisieren?

was ich machen möchte:
ich habe ein transparentes konsolenfesnter auf meinem esktop in dem mir unter andere der zur verfügung stehende festplattenspeicher angezeigt wird, fällt dieser unter eine bestimmt Grenze, so soll er in roter-schrift statt in weiss ausgegeben werden.
 
Zuletzt bearbeitet:
Warum so kompliziert. Setze doch eimnfach ne diskquota.
 
Ich finde meine Lösung auch nicht sehr kompliziert, hat mich damals weniger Zeit gekostet als Einarbeitung in Quotas.. Aber das was jetzt gewünscht wird ist ja auch schon nicht mehr die originale Fragestellung..
Und die dann überwachen meint ihr?

Mit awk ginge das zur Not auch;
Code:
BEGIN {
    errors=0
    space_limit=20
    percentage_limit=10
}

NR >= 1 {
    if ( $3 > 0 ) {
        if ( ($5/$3*100 < percentage_limit) && ($5/1024 <= space_limit) ) {
            errors+=1
        }
    }
}

END {
    exit errors
}
Und dann aufrufen wie weiter oben beschrieben mit dem df | grep | awk. Dann ist der Returnvalue entsprechend 0 wenn alles ok ist oder nicht 0 wenn der freie Speicherplatz die Grenze unterschreitet. Und dann kannst du danach in welcher Sprache auch immer machen was du willst. Aber das geht sicher eleganter, wo willst du das denn einbinden.

Zum Thema Quota, wie wird denn da der Verbrauch überprüft?
 
wie gesagt, ich hab mirnur in terminal auf die konsole gepinnt und darin las ich mir in der bash ein paar infos ausgeben, z.B. der freie Plattenplatz, mehr is das nicht.
Und eben, damit ichs sehe, wenn mir der platz ausgeht solls in rot dastehen, wenn ein minimum unterschritten wird.

hm ... wenn ich dann
Code:
df -mlPT | grep /dev/md0 | awk -f space.awk
aufrufe, dann sollte er mir doch ne 0 oder ne 1 zurückgeben, oder ? aber er gibts garnichts zurück
 
Zuletzt bearbeitet:
http://tldp.org/LDP/abs/html/exit-status.html
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

Für Bash:
$? reads the exit status of the last command executed. After a function returns, $? gives the exit status of the last command executed in the function. This is Bash's way of giving functions a "return value." [1] After a script terminates, a $? from the command-line gives the exit status of the script, that is, the last command executed in the script, which is, by convention, 0 on success or an integer in the range 1 - 255 on error.
 
Zuletzt bearbeitet:

Ähnliche Themen

Shellskript - Fehler in Cron

Afänger braucht Hilfe - /temp ist voll, kde geht nicht, wie weiter ??

Server's Power

ordner auf änderungen überwachen

angezeigte Partitionsgröße falsch

Zurück
Oben