如何调试面向AppEngine灵活的cron作业?

时间:2018-04-26 13:48:45

标签: google-app-engine cron

我正在尝试在Google Cloud中设置cronjob。我用过tutorial。 我的cron.yaml看起来像这样:

cron:
  - description: "daily start"
    url: /api/mycontroller/analyze
    schedule: every 5 minutes from 18:00 to 19:00

但是,结果是作业状态失败

到目前为止我的观察结果:

  • 我看到在我的控制台中注册的作业 - > AppEngine - >任务队列 - > Cron Jobs标签。
  • 该网址定位于AppEngine Flexible ASP.NET服务。
    • 因此我假设url是服务的相对URL。如果我指定完整的URL,那么在部署cron.yaml时会出现错误,说它与正则表达式不匹配^(?:^ /。* $)$
  • 在Fiddler中,我已确认该网址使用GET同时使用http和https。端点返回HTTP状态代码200.
  • 我没有检查代码中的X-Appengine-Cron标头。
  • 我已将防火墙中的两个IP地址列入白名单。
  • 在日志(https://console.cloud.google.com/logs)中,过滤了“GAE Application”,我可以看到我对端点的Fiddler请求但是我没有看到任何来自cron的内容,即使在Cron中手动运行作业也是如此工作标签。
  • 如果我单击Cron Jobs选项卡中的View按钮查看日志,那么我将通过以下过滤器进入/ logs页面。但是,它根本不显示任何日志条目。 protoPayload.taskName = “178eeebae17ee10ec3bc8d53b6xxxxxx” protoPayload.taskQueueName = “__ cron的”
  • 我在cron.yaml中指定了一个随机网址,我知道我的ASP.NET中没有有效的端点,我得到的结果与上面相同。

我一直在搜索Google网上论坛以及StackOverflow而没有更多的运气:

  • 我看过一些帖子提到在服务中创建一个处理程序(一个特殊的方法?),但它只适用于标准环境,而且根本没有在教程中提及。
  • 我也看到有些人提到控制台中的cron日志(或缺少),但我在/ var / log / messages和/ var / log / syslog中找不到该文件或任何有趣的东西

我做错了什么,如何找出失败的原因?

编辑:删除了一些搜索链接。

1 个答案:

答案 0 :(得分:0)

好吧,它失败的原因是我在同一个项目上有2个服务,默认是另一个带有我实际想要调用的端点的服务。通过在cron.yaml中使用'target'属性,我可以指定服务,现在它报告成功。我可以确认该服务确实收到了一个请求,它来自我列入白名单的IP之一。