在谷歌应用程序引擎不工作的cron工作
我已经从这个google cloud tutorial烧瓶基本python 3教程网站,我能够设置和网站工作得很好。在谷歌应用程序引擎不工作的cron工作
另外,我还想运行一个python脚本,每天运行一次以收集一些数据,但cron作业不起作用。我还增加了登录:admin限制任何人直接使用该网址
cron.yaml
cron:
- description: test dispatch vs target
url: /cronapp
schedule: every 5 hours
的app.yaml
runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app
runtime_config:
python_version: 3
handlers:
- url: /cronapp
script: cronapp.py
login: admin
我打电话以此为http://myproject.appspot.com/cronapp也没有按不工作,并返回一个404. 我做错了什么?任何帮助表示赞赏
您的app.yaml文件正在将标准环境Handlers元素混合到flexible environment configuration中,因此可能会忽略它。您可以在开发人员控制台中的应用程序日志中看到cron请求(尽管可能有错误)。
您需要添加一个处理/cronapp
您的应用程序代码中,而不是在app.yaml
。不完全确定你是如何做到的(我仍然只使用标准环境),这取决于你的应用程序和/或其框架。请看一下Hello World code review的烧瓶示例。
更新:
我可能不完全正确,我根据我的文档的答案,但我只注意到一些不一致的地方(我派了一些文档反馈给谷歌为它)。
灵活的环境Securing URLs for cron(这似乎大多来自the standard environment equivalent复制)提到了几个解决方案:
- 一个确实根据的
login: admin
选项handler
:
您可以限制通过将
login: admin
添加到app.yaml
中的处理程序 配置部分的URL。欲了解更多信息,请参阅 Securing URLs
但handler
没有在Configuring your App with app.yaml所提及Securing URLs指向一个不存在的标签。所以我不确定这是否确实有效。
- 第二个是基于
X-Appengine-Cron
报头(与在标准环境):从Cron服务
请求还将包含一个HTTP标头:
X-Appengine-Cron: true
X-Appengine-Cron
标头由Google App Engine在内部设置。 如果您的请求处理程序发现此头文件,它可以相信 请求是一个cron请求。如果标题出现在对您的应用的外部 用户请求中,则会将其除去,除了登录到应用管理员的 的请求被允许为测试目的设置 标头。
但在Removed headers需提到的是:
X-Appengine-*
此外,符合下列图案 ,一些选定的报头被从请求中删除
目前尚不清楚这是否延伸至
X-Appengine-Cron
。值得一试。这是我在(基于标准环境,基于webapp2的)cron处理程序代码中的检查:if self.request.headers.get('X-AppEngine-Cron') is None: self.abort(403) # HTTPForbidden
谢谢丹。如果我把处理程序直接放在应用程序中,Cron可以正常工作。但我不希望外部世界称这个URL。这应该只能通过cron访问。任何想法如何限制? – user1251323
感谢Dan的详细回复。我如前所述在头文件中使用X-app engine-cron进行了测试,但看起来它并未在灵活环境中与头部一起发送。我会用google打开一张票。 – user1251323
我不知道现在发生了什么。但新项目的全新部署似乎与X-AppEngine-Cron解决方案一起工作。再次感谢你的帮助。 – user1251323