在此示例代码中,应用程序的 URL 似乎由应用程序中的这一行决定:
application = webapp.WSGIApplication([('/mailjob', MailJob)], debug=True)
但也可以通过 app.yaml 的应用程序处理程序中的这一行:
- url: /.*
script: main.py
但是,cron 任务的 URL 由以下行设置:
url: /tasks/summary
所以似乎 cron 实用程序将调用“ /tasks/summary
”,并且由于应用程序处理程序,这将导致main.py
被调用。这是否意味着,就 cron 而言,应用程序中设置 URL 的行是无关的:
application = webapp.WSGIApplication([('/mailjob', MailJob)], debug=True)
. . . 因为 cron 任务需要的唯一 URL 是 app.yaml 中定义的 URL。
app.yaml
application: yourappname
version: 1
runtime: python
api_version: 1
handlers:
- url: /.*
script: main.py
cron.yaml
cron:
- description: daily mailing job
url: /tasks/summary
schedule: every 24 hours
main.py
#!/usr/bin/env python
import cgi
from google.appengine.ext import webapp
from google.appengine.api import mail
from google.appengine.api import urlfetch
class MailJob(webapp.RequestHandler):
def get(self):
# Call your website using URL Fetch service ...
url = "http://www.yoursite.com/page_or_service"
result = urlfetch.fetch(url)
if result.status_code == 200:
doSomethingWithResult(result.content)
# Send emails using Mail service ...
mail.send_mail(sender="admin@gmail.com",
to="someone@gmail.com",
subject="Your account on YourSite.com has expired",
body="Bla bla bla ...")
return
application = webapp.WSGIApplication([
('/mailjob', MailJob)], debug=True)
def main():
wsgiref.handlers.CGIHandler().run(application)
if __name__ == '__main__':
main()