Python Google App Engine Cron作业/计划任务不起作用

时间:2012-09-06 09:59:23

标签: python google-app-engine cron python-2.7

我正在创建此cron作业以获取Twitter提要并将其存储在数据存储区中。我尝试了一切,但我的cronjob没有用。我阅读了以下文章/教程和一些stackoverflow问题,但我无法解决这个问题。

  

https://developers.google.com/appengine/docs/python/config/cron

     

http://cloudartisan.com/posts/2010-06-02-scheduled-tasks-with-google-app-engine-python/

这是我的代码

这是cron.ymal

cron:
- description : capture twitter feed 
  url : /twittertask
  schedule: every 1 minutes
  target: version-2

这是我需要完成这项工作的课程。

import webapp2
from google.appengine.ext import db

class Twitt(db.Model):
    created_at = db.IntegerProperty(required = True)
    id = db.StringProperty(required = True)
    text = db.StringProperty(required = True)

class TwitterTask(webapp2.RequestHandler):

    def get(self):
        url = "https://api.twitter.com/1/statuses/user_timeline.json?include_entities=true&include_rts=true&screen_name=BeijingAir&count=10"

        json_string = urllib2.urlopen(url).read()

        data = json.loads(json_string)

        for item in data:
            created_at_item = item['created_at']
            text_item = item['text']
            id_item = item['id']

            e = Twitt(id = created_at_item, text = text_item, id = id_item)
            e.put()

        self.response.out.write('Hello prueba!')

这是app.ymal

application: cronjob
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /.*
  script: index.app

- url: /twittertask
  script: twittertask.app

这是index.py

import webapp2

class MainPage(webapp2.RequestHandler):
  def get(self):
      self.response.headers['Content-Type'] = 'text/plain'
      self.response.write('Hello, Check Admin')

app = webapp2.WSGIApplication([('/', MainPage)],
                              debug=True)

def main():

    run_wsgi_app(application)

if __name__ == "__main__":
    main()

好吧,我找不到错误在哪里。我在开发服务器上测试过。我没有将其上传到谷歌应用引擎。

2 个答案:

答案 0 :(得分:4)

问题在于你的app.yaml。网址从上到下匹配,但您的第一个处理程序与所有网址匹配。移动twittertask条目,使其首先位于handlers下。

答案 1 :(得分:1)

Cron无法在本地开发服务器上运行。将其上传到云端,它会工作。

在本地访问您的appserver:

http://127.0.0.1:8080/_ah/admin

并点击“Cron jobs”。

http://127.0.0.1:8080/_ah/admin/cron

它会说“在生产中,这将在这些时间运行:”

你的日程安排。