Page 1 of 1

Problem - Shell und Crontab ergeben nicht das gleiche Ergebnis?

Posted: 12. Nov 2007 22:46
by Philipp
Hallo Zusammen,

Ich habe ein echtes Problem. Beisse mir ein wenig die Zähne aus.

Ich habe mir folgendes Script geschrieben um zu überprüfen ob mein Server noch online ist.

wget www.example.com/onlinefile.php
x=$(grep 'xyz' /exec/onlinefile.php)

date=$(date)

if [ "$x" = "xyz" ]
then echo $date >> /exec/status.log

else
echo "Seite ist nicht mehr erreichbar." | mail phil@example.co

fi
rm /exec/onlinefile.php

Nun, der Witz daran ist, wenn ich das Programm direkt via Putty ausführe, klappt dies perfekt. Das File onlinefile.php mit dem Inhalt xyz wird heruntergeladen und überprüft. Wenn ich mein Programm nun automatisch mittels crontab laufen lasse, schickt er mir jeweis immer wenn das Programm ausgeführt wird, eine E-Mail. Unabhängig ob der Server online ist oder nicht. Wie kann das sein?

Ich benutze übrigens Debian.
Danke und Gruss

Posted: 13. Nov 2007 1:45
by Janka
cron benutzt höchstwahrscheinlich einen anderen Suchpfad, so dass wget nicht gefunden werden kann und in der Folge grep nicht auf eine aktuelle Datei zugreift.

In cron-Skripten setzt man besser immer explizit den Suchpfad oder gibt absolute Pfade bei jedem Befehl an.

Außerdem solltest du überlegen, statt wget "curl" zu verwenden, womit das ganze Skript ohne temporäre Dateien auskäme.

Janka

Posted: 13. Nov 2007 10:56
by Philipp
Genau das war der Fehler! Vielen Dank für die Hilfe, das Script läuft jetzt perfekt!

Leider kennt mein Debian den Befehl "curl" nicht, gibtes vielleicht eine alternative?

Vielen Dank und ein schöner Tag! Gruss Philipp

Posted: 13. Nov 2007 18:27
by PDA
cURL ist ein Programm.

http://curl.haxx.se/

Posted: 13. Nov 2007 23:08
by Janka
"apt-get install curl" sollte dies beheben.

Janka

Posted: 22. Nov 2007 15:02
by JochenAlsGast
Aber warum sollte man dazu unbedingt curl statt wget nehmen muessen?

Code: Select all

PATH=/bin:/usr/bin
export PATH

if wget -q -O - http://www.example.com/onlinefile.php | grep -q 'xyz'; then
    date >> /exec/status.log
else
    echo "Seite ist nicht mehr erreichbar." | mail phil@example.co 
fi
Keine überflüssigen Tempfiles, keine überflüssigen Ausgaben, keine überflüssigen Variablen. Und mit der PATH-Angabe sind auch keine absoluten Pfade notwendig.

Jochen