Здесь происходило множество странных вещей.
Во-первых, app.yaml
Мне пришлось разместить обработчик /cron
до того, как был установлен корень:
handlers:
- url: /cron
script: assets/backup/main.py
- url: /
static_files: assets/index.html
upload: assets/index.html
В противном случае я получу сумасшедшие ошибки из-за невозможности найти файл. Этот бит на самом деле имеет смысл.
Следующим битом был код Python. Не уверен, что здесь происходит, но, в конце концов, мне удалось заставить его работать так:
#!/usr/bin/env python
# import logging
from google.appengine.ext import webapp
from google.appengine.api import mail
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.api import urlfetch
import logging
class CronMailer(webapp.RequestHandler):
def get(self):
logging.info("Backups: Started!")
urlStr = "http://example.com/file.php"
rpc = urlfetch.create_rpc()
urlfetch.make_fetch_call(rpc, urlStr)
mail.send_mail(sender="example@example.com",
to="email@example.co.uk",
subject="Backups complete!",
body="Daily backups have been completed!")
logging.info("Backups: Finished!")
application = webapp.WSGIApplication([('/cron', CronMailer)],debug=True)
def main():
run_wsgi_app(application)
if __name__ == '__main__':
main()
Что бы это ни вызывало проблемы, теперь оно исправлено.