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:
Script zum überprüfen der HDD
Re: Script zum überprüfen der HDD
Ich sehe da nur "bild".
Installieren kannst du ein neues (user-)crontab ohne Nutzerinteraktion z.b. so:
Diesen Code kannst du z.b. auch in das script selber einbauen, beispielsweise, wenn es mit "install" aufgerufen wird:
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
Code: Alles auswählen
./mein_cooles_script.sh install
Perl macht Spass.
Re: Script zum überprüfen der HDD
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???
# 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???
Re: Script zum überprüfen der HDD
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):
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!)
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
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.