2009-05-10 4 views
2

Ich arbeite an Cron-Jobs für meine PHP-App und plane, cron über wget/curl zu verwenden. Einige meiner php Cron Jobs können 2-3 Stunden dauern. Wie lässt sich PHP 2-3 Stunden vom Cron-Tab aus arbeiten? Ist es eine gute Praxis, solche Jobs über cron wget/curl auszuführen? Hat jemand Erfahrung damit? Ich habe auch eine E-Mail-Warteschlange und ich muss alle 10 Sekunden ausgeführt werden, aber Cron Tab ist Minutenebene. Irgendwelche Vorschläge für diesen Fall?lange Zeit cron Job über wget/curl?

Danke fürs Lesen.

Antwort

4

Wenn Sie wget/curl verwenden, fordern Sie eine Seite von einem Webserver an. Jeder Webserver hat eine Zeitüberschreitung, dies kann zu einer Zeitüberschreitung führen.

Auch einige der hosting-Provider stoppen möglicherweise den Prozess über bestimmte Minuten hinaus (im Grunde getan, um die Rogue-Threads zu kontrollieren).

Es ist also nicht ratsam, mit wget/curl zu planen, wenn der Job mehr als einige Minuten dauert.

Versuchen Sie, es mit dem tatsächlichen Scheduler zu planen. [-] [args ...]

php Befehl sollte auf dem Weg Sie können PHP von der Kommandozeile

php [Optionen] [-f] laufen.

+0

Wenn ich PHP-Skript von der Befehlszeile verwenden wird in Ordnung sein mit langer Ausführungszeit? Einige meiner Jobs brauchen wirklich viel Zeit. Danke für die Antwort – taras

+0

Ich hatte ein PHP-Skript für 14 Tage ausgeführt, es stürzte nur wegen eines Speicherlecks. Denken Sie daran, damit dies funktioniert, benötigen Sie die CLI-Version von PHP. –

+0

"Einige meiner Jobs dauern wirklich lange" Es ist in Ordnung, wenn Ihr Hosting-Provider erlaubt. –

2

Sie können die folgenden am Anfang des Skripts verwenden PHP zu sagen, um effektiv nie eine Auszeit:

set_time_limit(0); 

Was klüger sein kann, ist, wenn crontab das Skript alle 24 Stunden ausgeführt wird, gesetzt die Zeitüberschreitung auf 24 Stunden, damit nicht zwei Kopien gleichzeitig ausgeführt werden.

set_time_limit(24*60*60); 

Crontab erlaubt nur Minuten-Level-Ausführung, da, dass die am häufigsten ist, sollten Sie wirklich ein Skript den Markt bringen - ein Start/Stop-Kosten, die schnellere Planungs ineffizient machen.

Wenn Ihre Anwendung eine Warteschlange alle 10 Sekunden überprüft, ist eine bessere Strategie möglicherweise ein einzelnes Skript mit langer Laufzeit, das diese Überprüfung durchführt und gelegentlich sleep() verwendet, um Systemressourcen zu blockieren.

Auf einem UNIX-System sollte ein solches Skript wirklich als Daemon laufen - sehen Sie sich das Paket PEAR System_Daemon an, um zu sehen, wie das einfach durchgeführt werden kann.

2

Ich habe gerade in das Problem mit einem lang laufenden PHP-Skript, das über Cron und Wget ausgeführt wird. Das Skript wird nach 15 Minuten aufgrund des Standard-Timeouts in wget beendet.

Allerdings glaube ich, dass diese Methode tatsächlich funktioniert, wenn Sie die richtigen Timeouts einrichten. Das von Ihnen ausgeführte PHP-Skript muss auf eine unbegrenzte Laufzeit eingestellt sein. Am besten stellen Sie dies am Anfang Ihres lang laufenden Skripts ein.

Wenn Sie wget verwenden, müssen Sie auch das Timeout entfernen, indem Sie -T0 übergeben. z.B.

wget -q0 -T0 http://yourhost/job.php 

Achten Sie darauf, Ihren Server nicht mit lang laufenden Skripts zu überlasten.