-
CronJob mit redirect?
Hallo,
ich habe ein Script, welches teilweise sehr aufwändige Berechnungen / Operationen durchführen muss. Nun habe ich dieses Script mal bezgl. der Laufzeit getestet und es überschreitet bei voller Ausführung aller Features bereits bei 100 Datensätzen die Grenze von 30 Sekunden max_execution_time! :eek:
Das Script wird per CronJob aufgerufen.
Kann man aus der Funktion heraus die cron.php erneut aufrufen und damit einen 2., 3. usw. Durchlauf starten?
Oder welche anderen Möglichkeiten habe ich noch?
Viele Grüße,
raveolution
P.S.: Heraufsetzen der Scriptlaufzeit mit set_time_limit(0); ist keine Lösung, weil das nur läuft wenn PHP nicht im Safe Mode ausgeführt wird!
-
Hi,
Der Workaround mit der cron.php heißt ja nicht umsonst "Poor Mans Cron". :-) Soll heißen: Für mache Dinge braucht man eben professionelles Hosting...
Wenn du dein Skript nicht weiter optimieren kannst sehe ich zwei Lösungen:
1. Nutzung einer Hosting-Umgebung, die echte Cronjobs zulässt. Dann ist die Laufzeit kein Thema. Wobei auch dort sollte man es nicht übertreiben.
2. Du merkst dir, welche Datensätze zu bearbeiten sind und arbeitest pro Aufruf immer einen kleinen Teil durch.
Bedenke aber bei der 2. Lösung: Der Anwender sieht, dass das Laden der Seite erst nach langer Zeit abgeschlossen wird. Auch Geschwindigkeitsanalysen wie von Google kann dies negativ beeinflussen (und damit das Ranking schlechter werden lassen).
Jan
-
Hallo Jan,
danke für deine schnelle Antwort!
Ich habe für diese Aufgabe schon die Nutzung eines richtigen CronJobs geplant. Aber das dort die Ausführungszeit keine Rolle spielt, ist mir neu. Gilt dort nicht die max_execution_time? Hast du dafür eine Quelle, wo man das nachlesen kann?
Ich habe Laufzeittests mit bis zu 200 Datensätzen gemacht und dabei dieses set_time_limit(0) genutzt. Dann habe ich das auf 500 Datensätze hochgerechnet und komme auf eine Laufzeit von ca. 180 Sekunden! 500 Datensätze sind die Grenze, welche durch den Auftraggeber gesetzt wurde - alles was darüber ist, entzieht sich also meinem Verantwortungsbereich.
Viele Grüße,
raveolution
-
Hi,
Infos zum CLI (Command Line Interface) gibt es hier. Dort wird auch beschrieben, dass max_execution_time für CLI auf 0 (unlimitiert) gesetzt wird.
Jan
-
Ahhh... vielen Dank für den Tipp mit dem CLI! Das kann ich bei meinem CronJob-Manager tatsächlich auswählen. Allerdings erhalte ich bei der Ausführung nun immer einen fehler, mit dem ich absolut nichts anfangen kann:
Code:
/tmp/cron_run_command_contaj.sh: line 3: 19948 Killed
-
Hi,
hmm, als ob das Skript irgendetwas/irgendwer abschießt. Vielleicht weil es zu viel Ressourcen benötigt bzw. zu viel Last erzeugt.
Auf was für einem Server läuft das denn?
Jan
-
Es ist ein Account (also eine Domain) auf solch einem Managed Server: http://www.hetzner.de/de/hosting/pro...anaged/ms5000/
Wenn ich einen normalen CronJob einrichte und im Script dieses set_time_limit(0); einfüge läuft das Script ohne Probleme durch. Die längste Laufzeit habe ich bisher mit 112 Sekunden gemessen.
-
Hi,
hmm, dann würde ich mal den Support von Hetzner fragen, warum der Cronjob gekillt wird. Vielleicht findest du auch was in deren Dokumentation zu dem Thema.
Jan
-
OK, werde ich machen!
Vielen Dank für deine Hilfe.