我一直在尝试使用 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
不知道我在这里做错了什么。
编辑
一点上下文。这是我从这个 repo开始编辑的东西。
在那里定义的被调用的服务backend运行良好(它在 cron 作业中也有相同的时间表,my_service但是当我在与它安排的日期不同的一天触发它时,它工作得很好)。我所做的是使用它自己的 yaml 文件创建一个附加服务,该文件看起来与它beckend.yaml自己my_service.py的. 从理论上讲,这应该可行,因为结构完全相同,但事实并非如此。dispacth.yamlcron.yaml
该服务最初是在标准环境中开发的,并且可以正常工作,当我将其移至 flex 环境时,问题就出现了。
编辑2:
问题实际上出在 Dockerfile 中,它调用了我没有使用的服务。