2009-04-16 6 views
3

Ich suche nach einer Möglichkeit, Pseudo-Cronjobs zu erstellen, da ich die echten Jobs unter UNIX nicht verwenden kann.Google App Engine für Pseudo-Cronjobs?

Da Python-Skripte unbegrenzt laufen können, dachte ich, Python wäre eine großartige Lösung.

In Google App Engine können Sie Python-Skripts einrichten und es ist kostenlos. Also sollte ich die App Engine verwenden.

Die App Engine erlaubt 160.000 externe URL-Zugriffe (richtig?), Also sollten Sie 160000/31/24/60 = 3,6 Zugriffe pro Minute haben.

So würde mein Skript sein:

import time 
import urllib 
while time.clock() < 86400: 
    # execute pseudo-cronjob file and then wait 60 seconds 
    content = urllib.urlopen('http://www.example.org/cronjob_file.php').read() 
    time.sleep(60) 

Leider habe ich keine Möglichkeit, das Skript zu testen, so meine Fragen sind: 1) Glauben Sie, das funktionieren würde? 2) Darf (Google TOS) der Dienst für eine solche Aktivität verwendet werden? 3) Ist meine Berechnung für die URL-Zugriffe pro Minute richtig?

Vielen Dank im Voraus!

+0

Cron Jobs auf AppEngine werden die Antrag Frist begrenzt, die 30 Sekunden - so kann es nicht ‚auf unbegrenzte Zeit‘ läuft. – dar

+0

Sorry, was meinst du genau damit? Ich denke, Python selbst hat kein Zeitlimit, oder? Das einzige erforderliche Zeitlimit liegt im Browser des Clients. Aber wenn Sie die Datei nach Cronjobs ausführen, gibt es keinen Client. Oder hat Google App Engine ein eigenes Zeitlimit für die Anfrage, um zu vermeiden, dass Skripts zu lange ausgeführt werden? – caw

+0

Eigentlich ist das Zeitlimit auf der Serverseite auferlegt, also ja, dies vermeidet, dass Skripte zu viel Zeit in Anspruch nehmen. – fuentesjr

Antwort

6

Vielleicht machst du ja ich bin Missverständnis, aber die cron-Konfigurationsdateien lassen Sie dies tun (ohne Python). Sie können Sie cron.yaml Datei etwas wie folgt hinzufügen:

cron: 
- description: job that runs every minute 
    url: /cronjobs/job1 
    schedule: every minute 

Siehe Google's documentation für weitere Informationen zur Terminierung.

+0

Nein, du verstehst mich nicht falsch. Ich wusste nicht, dass es jetzt einen Cron Job Service gibt. Aber ich kann dem Cron Job Service keine externen URLs hinzufügen, oder? Also muss ich immer noch ein Python-Skript verwenden, das die externe Datei aufruft. Recht? – caw

2

Google hat einige Einschränkungen, wie lange eine Aufgabe ausgeführt werden kann.

URLFetch Anrufe im SDK jetzt habe eine 5-Sekunden-Zeit gemacht, here

Sie es Ihnen ermöglichen, in einem bestimmten Tag bis 20 cron Aufgaben zu planen, auf. Here

+0

Danke, also ist es nicht sehr geeignet für die Erstellung von Pseudo-Cron-Jobs. – caw

1

Sie möchten die Art und Weise klären, um was Sie tun wollen, dass es

Wollen Sie appengine verwenden, um den Job zu laufen? Dh der Job läuft auf Googles Server?

oder

Haben Sie Ihren eigenen Code auf dem Server verwenden möchten, und es auslösen, indem Sie Google App Engine?

Wenn es der ehemalige ist: Google macht Cron jetzt. Verwenden Sie das :)

Wenn es das letztere ist: Sie könnten googles cron verwenden, um Ihr eigenes auszulösen, selbst wenn es indirekt ist (dh, google-cron ruft Google-app-engine an, das Ihre-app aufruft).

Wenn Sie können, spinnen Sie einen Thread, um die Aufgabe zu erledigen, so dass Ihre Seite sofort zurückkehrt. Nicht vergessen: Wenn Sie http://whatever/mypage.php anrufen, und Ihr Browser stirbt (oder in diesem Fall, Google tötet Ihren Prozess für zu lange ausgeführt), läuft das PHP-Skript in der Regel immer noch bis zum Ende - die Ausgabe geht einfach nicht wohin.

Gelingt das nicht, versuchen, einen Faden zu spinnen (nicht sicher, ob Sie das in PHP tho tun kann - ich bin ein C# Kerl neu in PHP)

Und wenn alle Stricke reißen: ein besseres Webhost! Ich bezahle $ 6/Monat oder so für dreamhost.com, und ich kann Cron-Jobs auf ihren Servern ausführen - es ist inklusive. Sie machen PHP, Rails et al. Sie können mich sogar für einen Rabatt-Code pingen :) (Profil für Website usw.)

+0

Vielen Dank! Ich möchte, dass es auf die zweite Weise funktioniert, die du erwähnt hast. Es sollte nur das Skript auf meiner externen Website auslösen. Aber darf ich Google App Engine nur zum Auslösen meiner Cron-Jobs verwenden (Nutzungsbedingungen)? – caw

+0

Ich habe die TOS nicht genau gelesen, aber ich kann nicht sehen, warum nicht. Es ist nur ein URL-Aufruf, den Sie meiner Meinung nach tun dürfen. –

0

Tun Sie, was Nic Wise sagte oder auch die Cronjob mit einem Service wie www.guardiano.pm auslagern, so dass Sie tatsächlich www.yoursite aufrufen können. com/myjob.php und jedes Mal, wenn Sie diese URL aufrufen, wird etwas ausgeführt, das Sie wollen.

Ps ist frei Pss mein Lieblingsprojekt ist und ist in der Beta