GAE - сбой задания cron, без сообщений об ошибках в логах - PullRequest
0 голосов
/ 04 октября 2018

Я пытался запустить задание cron с помощью GAE (код, разработанный на Python), но когда я запускаю задание, оно завершается сбоем без какого-либо сообщения об ошибке - я ничего не могу найти в журналах.

Это происходит для службы, для которой я использую гибкую среду.

Это структура моих файлов:

my_service.yaml выглядит так:

service: my_service
runtime: custom
env: flex

env_variables:
  a:
  b:

my_service.app выглядит следующим образом:

<code>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>{}
См. Журналы для полной трассировки стека."" ".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

Не уверен, что я здесь не так делаю.

EDIT

Немного контекста. Это то, что я редактирую, начиная с этого репо .

Служба с именем backend, которая определена втам работает отлично (у него также такое же расписание в задании cron, как у my_service, но когда я запускаю его в день, отличный от того, в котором он запланирован, он работает просто отлично). Что я сделал, так это создал дополнительную службусо своим собственным файлом yaml, который выглядит точно так же, как beckend.yaml, со своим собственным my_service.py и добавлением его к dispacth.yaml и cron.yaml. Теоретически это должно работать, поскольку структура точно такая же,но это не так.

Этот сервис изначально разрабатывался в стандартной среде, и там он работал, проблема возникла, когда яПерешли на гибкую среду.

РЕДАКТИРОВАТЬ 2:

На самом деле проблема была в Dockerfile, который вызывал службу, которую я не использовал.

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Ваша 1 of month 10:00 спецификация расписания cron, скорее всего, может быть виновником: в ней указывается запускать работу в 10:00 только в первый день каждого месяца!От Определение расписания работы cron :

Пример: Для расписания 1,2,3 of month 07:00 задание запускается один раз в 07:00 в первые три дня каждого месяца.

Таким образом, последнее выполнение произошло 3 дня назад (если эта конфигурация cron была развернута в то время), и никакая другая попытка не произойдет до 1 ноября:)

Измените расписание на что-то более простоедля тестирования, например every 5 minutes или every 1 hours, и отменить изменение, как только вы будете довольны, оно работает как положено.

0 голосов
/ 04 октября 2018

РЕДАКТИРОВАТЬ:

def get(self): могут иметь некоторые проблемы.

Во-первых, get может быть зарезервировано.Во-вторых, вы не можете отправить self этой функции.Измените это на:

def get_service():

EDIT2:

Вам также нужно import logging вверху любой страницы, которая его использует.И вы не импортировали Flask и его компоненты:

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