Script zum überprüfen der HDD

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
mele
Beiträge: 7
Registriert: 18.11.2008 10:42:45

Script zum überprüfen der HDD

Beitrag von mele » 28.04.2009 10:50:14

gumo zusammen,

brauche eure hilfe und zwar hab ich ein Script welche die HDD auf den freien Festplattenplatz überprüft, es wird eine mail bei einer bestimmten prozentangabe verschickt(mit dem entsprechenden hostnamen der maschine).... so... jetzt muss dieses script sich aber noch selber installieren und einen cronjob einrichten. ich steh iwie aufm schlauch.... kann mir da jemand helfen??

das script sieht bis jetzt wie folgt aus:

Bild

Benutzeravatar
HELLinG3R
Beiträge: 1328
Registriert: 15.04.2004 07:54:33

Re: Script zum überprüfen der HDD

Beitrag von HELLinG3R » 28.04.2009 11:52:46

Ich sehe da nur "bild".

Installieren kannst du ein neues (user-)crontab ohne Nutzerinteraktion z.b. so:

Code: Alles auswählen

cat <<NEWCT | crontab -
`crontab -l`

# Ein kommentar, damit man weiß, wo es herkommt
0 19    * * *   do_something
NEWCT
Diesen Code kannst du z.b. auch in das script selber einbauen, beispielsweise, wenn es mit "install" aufgerufen wird:

Code: Alles auswählen

./mein_cooles_script.sh install
Perl macht Spass.

mele
Beiträge: 7
Registriert: 18.11.2008 10:42:45

Re: Script zum überprüfen der HDD

Beitrag von mele » 28.04.2009 14:44:29

das script schaut wie folgt aus: #!/bin/sh
# Serverbasiertes Shellscript zum überprüfen des Festplattenplatzes
# Das Script wird per SSH/SCP auf ausgewählte Server installiert, wenn es vorhanden ist, dann
# wird dieser Punkt übersprungen
if [/usr/local/bin/ = false]; then
(scp SKRIPT root@SERVER:/usr/local/bin/)
else [done];
fi
# Cronjob wird per SSH angelegt, es wird überprüft ob der Cronjob schon existiert, falls dies
# Fall ist, wird kein neuer Cronjob angelegt
if [/etc/crontab = false]; then
(ssh root@SERVER 'echo "CRONJOB_ZEILE" >> /etc/crontab; /etc/init.d/cron restart')
else [done];
fi
# Es wird eine Mail an $ADMIN geschickt, wenn 75 % der Festplatte ausgeschöpft sind
# e-Mail Einstellung um Mails zu erhalten
ADMIN="mail@mail.de"
# set alert-level 75 % standard
ALERT=10
df -H | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{ print $5 " " $6 }' | while read output;
do
#echo $output
usep=$(echo $output | awk '{ print $1}' | cut -d'%' -f1 )
partition=$(echo $output | awk '{ print $2 }' )
if [ $usep -ge $ALERT ]; then
echo "Speicherplatz zu gering auf \"$partition ($usep%)\", von $(hostname) am $(date)" |
mail -s "Alert: Speicherplatz zu gering, $usep % voll auf $partition" $ADMIN
fi
done

bin mir bei den ersten beiden if-abfragen nich sicher, ob des hinaut.... muss ich ansonsten, wenn sich das script nach kopiervorgang auf den server installiert hat einfach die zeile "./script.sh install" einfügen???

Benutzeravatar
HELLinG3R
Beiträge: 1328
Registriert: 15.04.2004 07:54:33

Re: Script zum überprüfen der HDD

Beitrag von HELLinG3R » 29.04.2009 13:17:37

Schau dir am besten ein paar Shell-Programmiereinführungen an, um zu lernen, wie das mit den Parametern funktioniert.
Ich würde es so implementieren, dass das script ohne Parameter den Festplattenplatz ermittelt und eine Fehlermeldung auf STDOUT ausgibt. Die Ausgabe anstelle des direkten Mailversandes hat den Vorteil, dass du den output noch weiterverarbeiten kannst. Ich nutze das in der Regel dafür, dass ich das Mailing über cront steuern lasse, denn dieser schickt die Ausgaben, die Programme erzeugen, optional an eine Emailadresse.
Optional dazu würde ich einen installparameter einführen, der dir ermöglicht, das script auf einem beliebigen Zielhost zu installieren.
Also (pseudocode) etwa so (in $1 steht der erste Parameter):

Code: Alles auswählen

if [[ $1 == "install" && -n $2 ]]; then
   # Installationsmodus: $1=commando, $2 zielhost
else
   # Platzprüfung
fi
Dann könntest du mittels des Aufrufes `skript.sh install foobar.cno` das Script auf dem Host foobar.cno installieren. Die Crontabzeile, die das Skript aufruft, müsste das script lediglich ohne Parameter aufrufen (oder weitere, jenachdem, was du noch so alles parametriesieren willst, z.b. die Maileinstellungen oder alertlevel)

Auf jeden Fall solltest du deine "crontabprüfung" so umbauen, dass nach dem Eintrag gesucht wird, und nicht nach dem vorhandensein des Files.


Als Alternative biete ich dir mal meine Lösung:
Ich hab das mal (halbwegs dirty) in nem Einzeiler mit perl gemacht. Die Zeile steht im Usercrontab, nicht im Systemcrontab, denn das bietet den Vorteil, dass man leichter steuern kann. (Auch root hat ein eigenes usercrontab!)

Code: Alles auswählen

# Benis crontab (gepflegt mit Kommando crontab)

# Ausgaben an root mailen
MAILTO="root@somehost.cno"

# Belegter Plattenplatz > 80% melden und df-Zeile ausgeben
df -h | perl -e 'while ($l = <STDIN>){if ($l =~ /\s[89][0-9]%/){print "DISK FULL ALARM $l";} }';
Perl macht Spass.

Antworten