GAE - cron 作业失败,日志中没有错误消息



我一直在尝试使用 GAE(用 Python 开发的代码(运行 cron 作业,但是当我触发作业时,它失败了,没有任何错误消息——我在日志中根本找不到任何东西。

对于我正在使用灵活环境的服务,正在发生这种情况。

这是我的文件结构:

my_service.yaml看起来像这样:

service: my_service
runtime: custom
env: flex
env_variables:
a:
b:

my_service.app如下所示:

from __future__ import absolute_import
from flask import Flask
from flask import request
import logging
import datetime
import os
import tweepy
from google.cloud import datastore
import time

logging.basicConfig(level=logging.INFO)
app = Flask(__name__)
@app.route('/Main')
def hello():
"""A no-op."""
return 'nothing to see.'
@app.route('/my_service')
def get_service():
is_cron = request.headers.get('X-Appengine-Cron', False)
logging.info("is_cron is %s", is_cron)
# Comment out the following test to allow non cron-initiated requests.
if not is_cron:
return 'Blocked.'
## data scraping and saving in Datastore
return 'Done.'
@app.errorhandler(500)
def server_error(e):
logging.exception('An error occurred during a request.')
return """
An internal error occurred: <pre>{}</pre>
See logs for full stacktrace.
""".format(e), 500

if __name__ == '__main__':
app.run(host='127.0.0.1', port=8080, debug=True)

然后我有一个具有此结构的dispatch.yaml

dispatch:
- url: "*/my_service*"
service: my_service

还有cron.yaml

cron:
- description: run my service
url: /my_service
schedule: 1 of month 10:00
target: my_service

不知道我在这里做错了什么。

编辑

一点背景。这是我从这个存储库开始编辑的内容。

其中定义的名为backend的服务运行良好(它在 cron 作业中的计划也与my_service相同,但是当我在与计划不同的一天触发它时,它工作得很好(。我所做的是使用自己的yaml文件创建一个附加服务,该文件看起来与beckend.yaml完全相同,它自己的my_service.py并将其添加到dispacth.yamlcron.yaml中。从理论上讲,这应该有效,因为结构完全相同,但事实并非如此。

该服务最初是在标准环境中开发的,并且在那里工作,当我将其移动到 flex 环境时,问题就出现了。

编辑2:

问题实际上出在 Dockerfile 中,即调用我没有使用的服务。

编辑:

def get(self):可能会有一些问题。

首先,get可能会被保留。其次,您无法将self发送到该函数。 将其更改为:

def get_service():

编辑2:

您还需要import logging使用它的任何页面的顶部。 而且,您尚未导入Flask及其组件:

from flask import Flask, request, render_template #  etc...
import logging

您的1 of month 10:00cron 调度规范很可能是罪魁祸首:它指定仅在每月第一天的10:00 运行作业! 从定义 cron 作业计划:

示例:对于1,2,3 of month 07:00计划,作业运行一个 时间在每个月的前三天的07:00。

所以最后一次执行发生在 3 天前(如果当时部署了这个 cron 配置(,直到 11 月 1 日才会发生其他尝试:)

将计划更改为更易于测试的内容,例如every 5 minutesevery 1 hours,并在您满意后还原更改,它按预期工作。

最新更新