2009-04-16 9 views
3

Je cherche une possibilité de créer des pseudo-cronjobs car je ne peux pas utiliser les vrais jobs sous UNIX. Puisque les scripts Python peuvent fonctionner pendant une période illimitée, je pensais que Python serait une excellente solution.Google App Engine pour les pseudo-cronjobs?

Sur Google App Engine, vous pouvez configurer des scripts Python et c'est gratuit. Donc je devrais utiliser App Engine. L'App Engine permet 160 000 accès URL externes (à droite?), Vous devriez donc avoir 160000/31/24/60 = 3,6 accès par minute.

donc mon script serait:

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) 

Malheureusement, je n'ai aucune possibilité de tester le script, donc mes questions: 1) Pensez-vous que cela fonctionnerait? 2) Est-il permis (Google TOS) d'utiliser le service pour une telle activité? 3) Mon calcul pour les accès URL par minute est-il correct?

Merci d'avance!

+0

emplois Cron sur AppEngine sont limités à la limite de temps de demande, qui est de 30 secondes - il ne peut pas fonctionner »pour une durée illimitée. – dar

+0

Désolé, que voulez-vous dire exactement par là? Je pense que Python lui-même n'a pas de limite de temps, n'est-ce pas? La seule limite de temps est dans le navigateur du client. Mais si vous exécutez le fichier par cronjobs, il n'y a pas de client. Ou Google App Engine dispose-t-il d'une limite de temps de requête pour éviter que les scripts s'exécutent trop longtemps? – caw

+0

En fait, la limite de temps est imposée du côté serveur donc oui, cela évite que les scripts prennent trop de temps. – fuentesjr

Répondre

6

Peut-être que je vous mal compris, mais les fichiers de configuration Cron vous permettra de le faire (sans Python). Vous pouvez ajouter quelque chose comme ceci à votre fichier cron.yaml:

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

Voir Google's documentation pour plus d'informations sur la programmation.

+0

Non, vous ne me méprenez pas. Je ne savais pas qu'il y a un service d'emploi cron maintenant. Mais je ne peux pas ajouter d'URL externes au service de travail cron, puis-je? Je dois donc toujours utiliser un script Python qui appelle le fichier externe. Droite? – caw

2

Google a certaines limites sur la durée d'exécution d'une tâche.

appels urlfetch dans le SDK ont maintenant un délai de 5 secondes, here

Ils vous permettent de programmer jusqu'à 20 tâches cron en un jour donné. Here

+0

Merci, donc ce n'est pas très approprié pour créer des emplois pseudo cron. – caw

1

Vous pouvez vouloir préciser de quelle manière autour de vous voulez faire

Voulez-vous utiliser AppEngine pour exécuter le travail? C'est à dire, le travail s'exécute sur le serveur de google?

ou

Voulez-vous utiliser votre propre code sur votre serveur, et déclencher en utilisant Google App Engine?

Si c'est l'ancien: google fait cron maintenant. Utilisez ce :)

Si c'est le dernier: vous pouvez utiliser le cron de google pour déclencher votre propre, même si c'est indirectement (par exemple google-cron appels google-app-engine qui appelle votre-app).

Si vous le pouvez, faites tourner un thread pour faire le travail, afin que votre page revienne immédiatement. Ne l'oubliez pas: si vous appelez http://whatever/mypage.php, et votre navigateur meurt (ou dans ce cas, google tue votre processus pour fonctionner trop longtemps), le script php court toujours jusqu'à la fin - la sortie ne va nulle part.

A défaut, essayez de tourner un fil (pas sûr si vous pouvez le faire en PHP tho - Je suis un gars de C# nouveau pour PHP)

Et si tout le reste échoue: obtenir un meilleur hébergeur! Je paie 6 $/mois pour dreamhost.com, et je peux exécuter des tâches cron sur leurs serveurs - c'est inclus. Ils font PHP, Rails et al. Vous pouvez même ping pour moi un code de réduction :) (voir le profil pour le site Web etc)

+0

Merci beaucoup! Je veux que cela fonctionne comme vous l'avez mentionné. Cela devrait juste déclencher le script sur mon site externe. Mais suis-je autorisé à utiliser Google App Engine uniquement pour déclencher mes tâches cron (Conditions d'utilisation)? – caw

+0

Je n'ai pas lu les TOS de près, mais je ne vois pas pourquoi. C'est juste un appel URL, ce que je pense que vous êtes autorisé à faire. –

0

Faites ce que Nic Wise a dit ou externaliser le cronjob en utilisant un service comme www.guardiano.pm afin que vous puissiez réellement appeler www.yoursite. com/myjob.php et chaque fois que vous appelez cette URL, quelque chose que vous voulez sera exécuté.

Ps est libre Pss est mon projet animaux de compagnie et est en version bêta