crontab führt script falsch aus.

Bash, Shell, PHP, Python, Perl, CGI
latenite
Posts: 3
Joined: 2008-07-21 23:44

crontab führt script falsch aus.

Post by latenite »

Hallo Leute

ich habe folgendes Script in crontab von root aufgenommen um die temp. meiner Platten im Auge zu behalten. (jede min. ist nur zum test so eingestellt)

Code: Select all

    #!/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 :)



Wieso?? danke für eure Tips. :)
Roger Wilco
Posts: 5923
Joined: 2004-05-23 12:53

Re: crontab führt script falsch aus.

Post by Roger Wilco »

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? ;)
latenite
Posts: 3
Joined: 2008-07-21 23:44

Re: crontab führt script falsch aus.

Post by latenite »

Danke das war der Fehler :-D

taa da: hier mein erstes Script...

Ich bin jetzt sozusagen "entjungfert" was sdas Shellscript angeht.

Is da noch was zu verbessern? Seit bitte PINGELIG. Ich will ja was lernen.

Code: Select all

#!/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;
latenite
Posts: 3
Joined: 2008-07-21 23:44

Re: crontab führt script falsch aus.

Post by latenite »

Ä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?
User avatar
daemotron
Administrator
Administrator
Posts: 2639
Joined: 2004-01-21 17:44

Re: crontab führt script falsch aus.

Post by daemotron »

Eine kleine Anmerkung wäre da noch.

Code: Select all

#!/bin/sh
...
x=$(<befehl>)
...
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:

Code: Select all

x=`<befehl>`
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 :wink:
User avatar
Joe User
Project Manager
Project Manager
Posts: 11174
Joined: 2003-02-27 01:00
Location: Hamburg

Re: crontab führt script falsch aus.

Post by Joe User »

jfreund wrote:Die Angabe von /bin/sh als Interpreter suggeriert, dass Dein Skript kompatibel zur (ursprünglichen) Bourne Shell ist.

Code: Select all

sed 's/(kompatibel).*(ist)/POSIX 1 2/'
;)
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„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.