#!/bin/sh
DEVICE="/dev/sda"
MACHINE="fileserver"
TEMPLIMIT=50
DATE=$(date)
VALUETEMP=$(hddtemp -n $DEVICE)
#MAILTXT=""
if [ "$VALUETEMP" -gt "$TEMPLIMIT" ]; then
MAILTXT=${MAILTXT}"On ${DATE} the device: $DEVICE on $MACHINE got hotter than ${TEMPLIMIT} celcius. ${VALUETEMP} is TOO HOT !! Do something about it!!"
echo $MAILTXT | mail -s "HARDDRIVE on ${MACHINE} too HOT!! It has ${VALUETEMP} celcius" kai@poeritz.de
else
MAILTXT=${MAILTXT}"On ${DATE} the device: $DEVICE on $MACHINE had a normal temerature of ${VALUETEMP} celcius. That is OK :)"
echo $MAILTXT | mail -s "harddrive temperature on ${MACHINE} ok :)" kai@poeritz.de
fi
Wenn ich das script normal ausführe dann kommt eine email mit diesem Inhalt an:
On Di 22. Jul 07:19:03 CEST 2008 the device: /dev/sda on fileserver had a normal temerature of 37 celcius. That is OK :)
wenn es von crontab ausgeführt wird FEHLT die $VALUETEMP Variable in der email.
On Di 22. Jul 07:18:01 CEST 2008 the device: /dev/sda on fileserver had a normal temerature of celcius. That is OK :)
In Skripten und Cronjobs immer die vollständigen Pfade zu allen Programmen nutzen, da $PATH nicht bzw. nicht wie gewohnt gesetzt ist. Ich kann das offensichtlich nicht oft genug schreiben. ;)
PS: "temperature" hört sich besser an als "temerature", oder? ;)
#!/bin/sh
BINHDDTEMP="/usr/sbin/hddtemp"
DEVICES="/dev/sda /dev/sdb /dev/sdc"
MACHINE="fileserver"
EMAIL="system@poeritz.de"
TEMPLIMIT=50
DATE=$(date)
for DEVICE in $DEVICES; do
VALUETEMP=$($BINHDDTEMP -n $DEVICE)
MAILTXT=""
if [ $VALUETEMP -gt $TEMPLIMIT ]; then
MAILTXT=${MAILTXT}"On $DATE the device: $DEVICE on $MACHINE got hotter than $TEMPLIMIT celcius. $VALUETEMP is TOO HOT !! Do something about it!!"
echo $MAILTXT | mail -s "$DEVICE on $MACHINE too HOT!! It has $VALUETEMP celcius" $EMAIL
else
MAILTXT=${MAILTXT}"On $DATE the device: $DEVICE on $MACHINE had a normal temperature of $VALUETEMP celcius. That is OK :)"
echo $MAILTXT | mail -s "$DEVICE temperature on $MACHINE ok :)" $EMAIL
fi
done;
Äh da fällt mir ein... was is denn nun ein guter Wert für eine Temperaturwarnung?
Ich weiss nur das Kupfer bei 1085 Grad schmilzt... :?: :?:
Ab wann schmelzten Festplatten?
ist die moderne Notation. Neuere Bourne-Shell-Implementierungen und vor allem ihre Abkömmlinge wie Bash und ZSH verstehen das natürlich problemlos. Ältere Implementierungen kommen damit aber ins Trudeln, sie kennen nur die (schon etwas angestaubte) Backtick-Notation:
Die Angabe von /bin/sh als Interpreter suggeriert, dass Dein Skript kompatibel zur (ursprünglichen) Bourne Shell ist. Stilistisch sauber wäre also in Deinem Fall, entweder auf die alte Notation umzusteigen oder die bash als Interpreter anzugeben. Beides ist nicht ganz unproblematisch, da /bin/bash nicht auf jedem System notwendigerweise vorliegt. Die neue Notation ist aber deutlich besser lesbar als die alte Variante. Wenn Du portable Shell-Skripte schreiben willst, hast Du also die Wahl zwischen Pest und Cholera
„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.