PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme mit Cron-Job


mercutio
2015-09-03, 10:24:37
Moin moin,

ich habe Probleme mit einem Cronjob - er wird nicht ausgeführt.

Als Befehl soll eine url im Netz geöffnet werden, klappt aber nicht.

Bitte hilfe, warum es nicht klappt.
53137

Die URL ist erreichbar, wenn ich sie über einen Browser öffne, dann wird der Befehl nach index.php auch ausgeführt.
Der Webserver macht es aber nicht. Was habe ich falsch gemacht?
Theoretisch sollte der Job alle 30 min ausgeführt werden...

Rolsch
2015-09-03, 15:23:10
Ich würde mal versuchen deine URL in ein Script zu stecken und dieses im cronjob aufrufen. Vermutlich musste im Script oder in deinem direkten Aufruf mit wget oder so arbeiten.

Also etwa so:

crontab -l
*/10 * * * * /var/bin/dyndns.sh

root@dreambox:~> more /var/bin/dyndns.sh
#!/bin/sh
IP=`wget -q -O - http://checkip.dyndns.org | grep IP | expr \`awk '{print $6}'\` : '\([0-9.]*\)'`
...

RattuS
2015-09-03, 19:09:22
Die URL ist erreichbar, wenn ich sie über einen Browser öffne, dann wird der Befehl nach index.php auch ausgeführt.
Der Webserver macht es aber nicht.
Stell sicher, dass auch wirklich der exakt gleiche HTTP-Request ausgeführt wird. Über den Browser aufrufen könnte bedeuten, dass du noch Cookies hast, oder eine zwischengespeicherte Authentifizierung oder oder oder... Also wie vorgeschlagen mit wget oder Fiddler (http://www.telerik.com/download/fiddler) testen.

Cyv
2015-09-03, 20:14:59
Alternativ zum wget geht auch ein curl...
Aber das ist schlussendlich Geschmack.

Aber ich vermute ganz stark wie Rolsch, dass da der komplette Befehl rein muss. Vermutlich wird ein einfacher wget oder curl davor schon ausreichen.

mercutio
2015-09-04, 08:32:31
Ich probiere es seit gestern mit:
wget -q http://www. ... .net/index.php?option=com_prime&controller=jobs&hash= ...

Aber es scheint nicht zu funktionieren.
Ohne wget mit nur der URL in der Befehlszeile erhielt ich alle 30 Min eine Fehlermeldung, und zwar:
/bin/sh: http://www. ... .net/index.php?option=com_prime: Datei oder Verzeichnis nicht gefunden.

Mit wget zwar keine Fehlermeldungen mehr, aber der cronjob wird auch nicht ausgeführt.

Sind "&"-Zeichen in der Syntax unzulässig?
Auch scheint der Befehl nicht auf eine URL zu verweisen. Muss ich die URL evtl. in Anführungszeichen setzen..?

Ihr habt es sicher schon erraten: Ich bin totaler noob, was cronjobs angeht - und brauche Hilfe. Infos aus dem Internet copy & pasten scheint irgendwie noch nicht genug zu sein. ;(

mercutio
2015-09-04, 09:55:48
Tante google hat was ausgespuckt:

Das "&"-Zeichen ist evil, ich muss die URL in " " setzen. Oder das &-Zeichen \& abslashen.

ich habe noch gefunden:
curl "http://www.meineseite.de/scripte/delete_cache.php" >/dev/null
und
lynx -dump "http://www.meineseite.de/scripte/delete_cache.php" >/dev/null

Wie finde ich heraus, ob die Befehle tatsächlich ausgeführt werden? Und muss das ">/dev/null " da hin? Was passiert wenn es nicht da ist?

Und noch eine Frage: die index.php Datei, die der Cronjob aufrufen soll, liegt ja theoretisch auf dem gleichen Server, kann ich mir den "http://www. ..." Umweg nicht sparen und den Pfad zur PHP-Datei direkt angeben?

Edit: Ich teste die Cronjobs z.Zt. auf 2 Webservern. Von einem Server bekomme ich nun eine Email:
-: lynx: command not found

sei laut
2015-10-08, 09:08:36
Wie finde ich heraus, ob die Befehle tatsächlich ausgeführt werden? Und muss das ">/dev/null " da hin? Was passiert wenn es nicht da ist?

Über die Webserver Logdatei. Oder wenn du da keinen Zugriff darauf hast, lass vom php eine Datei mit Zeitstempel generieren. Dann hast du den Ausführzeitpunkt. ;) Am besten am Ende vom php Script.


Und noch eine Frage: die index.php Datei, die der Cronjob aufrufen soll, liegt ja theoretisch auf dem gleichen Server, kann ich mir den "http://www. ..." Umweg nicht sparen und den Pfad zur PHP-Datei direkt angeben?

Wenn auf dem System php cli installiert ist und du den absoluten Pfad kennst, ja. Dann einfach "php [Pfad-zur-php-Datei]/[php-datei.php]"

Und das >/dev/null heißt: Ausgabe nach /dev/null umleiten. Wenn dein Script keine Ausgabe produziert, kanns dir egal sein.