Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google app engine 谷歌应用程序引擎中的cron作业不工作_Google App Engine_Google Cloud Platform_App.yaml - Fatal编程技术网

Google app engine 谷歌应用程序引擎中的cron作业不工作

Google app engine 谷歌应用程序引擎中的cron作业不工作,google-app-engine,google-cloud-platform,app.yaml,Google App Engine,Google Cloud Platform,App.yaml,我在flask上建立了基本的Python3教程网站,我能够进行设置,网站运行得很好 此外,我还想运行一个python脚本,该脚本每天运行以收集一些数据,但是cron作业根本不起作用。我还添加了login:admin以限制任何人直接使用该url cron.yaml cron: - description: test dispatch vs target url: /cronapp schedule: every 5 hours runtime: python env: flex entr

我在flask上建立了基本的Python3教程网站,我能够进行设置,网站运行得很好

此外,我还想运行一个python脚本,该脚本每天运行以收集一些数据,但是cron作业根本不起作用。我还添加了login:admin以限制任何人直接使用该url

cron.yaml

cron:
- description: test dispatch vs target
  url: /cronapp
  schedule: every 5 hours
runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app

runtime_config:
  python_version: 3

handlers:
- url: /cronapp
  script: cronapp.py
  login: admin
应用程序yaml

cron:
- description: test dispatch vs target
  url: /cronapp
  schedule: every 5 hours
runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app

runtime_config:
  python_version: 3

handlers:
- url: /cronapp
  script: cronapp.py
  login: admin
我打电话给它,因为它也不工作,返回404。
我做错了什么?非常感谢您的帮助

您的app.yaml文件正在将标准环境元素混合到一个文件中,因此它可能会被忽略。您可能可以在开发人员控制台的应用程序日志中看到cron请求(不过可能有错误)

您需要在应用程序代码中添加
/cronapp
的处理程序,而不是在
app.yaml
中。不完全确定您是如何做到这一点的(我仍然只使用标准环境),这取决于您的应用程序和/或其框架。以烧瓶为例,请查看

更新:

我可能不完全正确,我的答案是基于文档的,但我注意到了一些不一致之处(我向谷歌发送了一些文档反馈)

灵活的环境(看起来主要是复制自)提到了两种解决方案:

  • 一个确实基于
    处理程序的
    登录:admin
    选项:
您可以通过向处理程序添加
login:admin
来限制URL
app.yaml
中的配置部分。有关更多信息,请参阅

但是中没有提到
处理程序
,并且指向不存在的标记。所以我不确定这是否真的有效

  • 第二个基于
    X-Appengine-Cron
    头(与标准环境中相同):
来自Cron服务的请求还将包含HTTP头:

X-Appengine-Cron: true
X-Appengine-Cron
头由Google App Engine在内部设置。 如果您的请求处理程序找到此标头,它可以相信 请求是一个cron请求。如果标题存在于外部文件中 用户对应用程序的请求将被剥离,来自的请求除外 已登录应用程序的管理员,允许他们设置 标题用于测试目的

但其中提到:

此外,一些选定的标题与以下模式匹配 已从请求中删除:

  • X-Appengine-*
目前尚不清楚这是否扩展到
X-Appengine-Cron
。值得一试。这是我签入的(基于标准env、webapp2的)cron处理程序代码:

    if self.request.headers.get('X-AppEngine-Cron') is None:
        self.abort(403)  # HTTPForbidden

谢谢你,丹。如果我将处理程序直接放在应用程序中,Cron可以正常工作。但我不想让外界称之为URL。这应该只能通过cron访问。关于如何限制这一点有什么想法吗?谢谢Dan的详细回复。正如您所说,我在标题中使用了X-app engine cron进行了测试,但在灵活的环境中,它似乎没有随标题一起发送。我将向谷歌开出一张罚单。我不确定现在发生了什么。但一个新项目的新部署似乎与X-AppEngine-Cron解决方案一起工作。再次感谢你的帮助。