PHP Cronjob.de führt Script nicht erfolgreich aus

M

Mr. Snoot

Gast
Hio,

ich hab ein paar Skripte, welche ich bei Cronjob.de eingestellt hab um sie alle 24h laufen zu lassen. Aber die Skripte werden offenbar nicht korrekt ausgeführt (zumindest ist die DB nicht mit den gewünschten Daten aktualisiert); laut Status wurden die Scripte aber gestartet (nur steht da nicht, ob's nen Fehler gab oder nicht). Rufe ich die Skripte selbst auf, dann klappt alles.

Jetzt dacht ich mir, dass die Scripte vielleicht wegen zu langer Laufzeit abbrechen. Bei Cronjob.de steht dazu folgendes:
Wie lange werden die Skripte ausgeführt?

Jeder Cronjob wird .. von cronjob.de maximal 20 Sekunden lang ausgeführt. ... Sollte ihr Skript nach 20 Sekunden aber noch nicht fertig sein, können Sie z.B. in PHP das Skript trotzdem weiterlaufen lassen. Dafür müssen Sie in Ihr PHP-Skript folgendes in die erste Zeile einfügen:

set_time_limit(0);
ignore_user_abort(true);
Das hab ich in die Scripte eingefügt, aber es funktioniert trotzdem nicht.

Wie finde ich raus, was da nicht funktioniert? Nur im 3 €-Tarif gäbe es die Option
Protokollierungen der letzten 20 Aufrufe mit Speicherung und Anzeige der Ausgabe Ihres Cronjobs
Das wär's mir eigentlich auch wert - aber dazu würd ich doch gerne wissen woran es überhaupt liegt. Nicht, dass in der Protokollierung dann nichts steht, womit ich das Problem lösen kann.

Vielleicht gibt's alternative kostenlose Dienste, wo ich seh ob das Script erfolgreich ausgeführt wurde?
 
error_reporting ist auf?
mach' mal zum Test auf
error_reporting(E_ALL);

Btw. es gibt sovielichweiß in PHP ne Möglichkeit, die Laufzeit eines Scriptes auszugeben, ich denke per timeende-timeanfang.
Probier' das mal aus damit du weißt wielange die Scripe überhaupt laufen.
 
Zuletzt bearbeitet:
Wie genau soll man dir da jetzt helfen ?
Was da drin steht hängt davon ab was dein Script zurückgibt + ggf. Fehler vom Interpreter.
Rufst du irgendwas mit system() oder ähnlich auf ?
Da hab ich immer die Fehler drin wenn der Cron andere Pfadvariablen usw. hat.

@foolproof: Ich glaube sein Problem ist, dass es das nicht auf dem System ausführen kann auf dem es nachher läuft bzw. da keinerlei Output hat.
 
@Blutschlumpf: Du weißt aber, was Cronjobs sind, oder?
Sorry, aber das hat nichts mit verschiedenen Servern zu tun, der Server von Cronjob ruft eine vorher festgelegte URL auf, ganz simpel.

Is z.B. suuper für automatische Backups oder sowas.
 
Ich habe das so verstanden, dass er das php-Script hochläd und das dann per php-cli ausgeführt wird.
Warum sollten die sonst angeben wie man die Laufzeit des Scriptes verändert wenn das ganze anderswo läuft.

Und ja, ich weiß was Cronjobs sind, php funktioniert allerdings auch ohne Webserver.
 
Ich les nur Daten via file_get_contents aus und speicher die in einer DB - nur stehen diese Daten eben nicht in der DB wenn das Script via Cronjob lief. Wenn ich das Script aber selbst aufrufe, dann klappts.

Fehler werden mir mit error_reporting keine angezeigt.
 
Und Laufzeit?
Kann mir nicht vorstellen, dass so ein Script mehr als 20 sekunden brauchen würde.
 
Da du schreibst, dass das Script seit ca. einer Woche nicht mehr funktioniert, könnte es eventuell am Jahreswechsel liegen. Hast du Datumsfunktionen verwendet die damit vielleicht ein Problem haben?

Edit: Um an die Fehlermeldungen ranzukommen kannst du zudem folgendes versuchen:
PHP:
<?php
//PHP-Ausgabe umleiten

ob_start();

//DEIN SCRIPT

$output = ob_get_contents();
ob_end_clean();

echo $output; //die ausgabe kannst du umleiten und in eine Datei oder deine Datenbank schreiben.
?>

Damit kannst du dir deine eigene Protokollierung basteln :)
 
Zuletzt bearbeitet:
Sollte mir der Code irgendwas anzeigen? Tut sich nämlich nichts; wenn ich das Script aufrufe läufts durch, aber liefert keine Ausgabe.

Das einzige was mit Datum zu tun hat ist der aktuelle Timestamp den ich speichere.


Ich versuch mal das Script schrittweise zu verkürzen, ob es dann irgendwann wieder per Cronjob läuft.
 
Nein, da das Script beim direkten Ausführen durchläuft, zeigt er da nichts an. Der Code ist einfach eine Art "Echo"-Umleitung. Wenn also Fehler auftreten, die PHP normalerweise direkt in das Dokument schreibt, kannst du so alles auffangen und dann in eine Datei schreiben. Hast du das beim cronjob versucht?
 
Via Cronjob kommt kein $output in der DB an; kann ja auch nicht, wenn das Script nicht durchläuft, oder?
 
schonmal überlegt den cronjob eventuell aufzusplitten?
Den Task in x Tasks zu zerlegen und diese parallel oder parallel hintereinander auszuführen?

wenn du einen Cronjobs baust der nur 5 Sekunden dauert, funktioniert der denn?
 
Das will ich noch testen; theoretisch müsste es langen wenn ich den Cronjob zweiteile, da er ja bisher auch anstandslos lief und nur ein paar zusätzliche Daten seitdem dazugekommen sind.
 
Wenn er nicht bis zum Eintragen kommt, dann kommt kein $output an, das ist richtig. Eine andere Möglichkeit wäre auch beispielsweise alle paar Befehle einen Status in eine Datei zu schreiben (fopen/fwrite/fflush/fclose). So siehst du genau, wo der Cronjob hängen bleibt bzw. wie weit er durchläuft.
 
Fehler gefunden - und er lag natürlich bei mir :freak:

Ich hab kürzlich via htaccess eingestellt, dass alle Anfragen an http://domain.de auf http://www.domain.de umgeleitet werden sollen. Bei Cronjob.de stand aber die URL ohne www und damit war gar kein Zugriff auf das Script möglich (hätte mir eigentlich gleich auffallen können, wenn ich einfach mal nen timestamp o.ä. in die DB hätte schreiben lassen ...).

Danke für die Unterstützung :)
 

Ähnliche Themen

J
Antworten
3
Aufrufe
3.474
Janniboy
J
Zurück
Oben