【问题标题】:( ndb, python, gae) - cron job timeout using more than one module(ndb, python, gae) - 使用多个模块的 cron 作业超时
【发布时间】:2015-12-22 21:31:20
【问题描述】:

在为单独的模块处理 cron 作业时,我需要做些什么特别的事情吗?我不知道为什么我可以在 localhost:8083/tasks/crontask 向 cron 作业发出请求(localhost:8083 运行工人模块),它应该只打印一个简单的行,它不打印到控制台,虽然它说如果我通过转到http://localhost:8000/cron 并点击运行按钮来运行它,请求是成功的。但即使这样仍然没有命中,让它打印到控制台。

如果我刷新页面 localhost:8083/tasks/crontask 作为触发 cron 作业的一种方式,它会超时。

再次,如果我转到 localhost:8001 并点击运行按钮,它表示对 /tasks/crontask 的请求成功,但它不会像预期的那样打印到控制台

在workers/handlers目录下的send_notifications_handler.py中

class CronTaskHandler(BaseApiHandler):

    def get(self):

        print "hello, this is a cron job"

在工作模块外的 cron.yaml 中

cron: 

- description: something

  url: /tasks/crontask

  schedule: every 1 minutes

  target: workers

在workers/handlers目录的init.py中

from send_notifications_handler import CronTaskHandler

#--- Packaging



__all__ = [

    CounterWorker,

    DeleteGamesCronHandler,

    CelebrityCountsCronTaskHandler,

    QuestionTypeCountsCronHandler,

    CronTaskHandler

]

在workers/routes.py中

 Route('/tasks/crontask', handlers.CronTaskHandler, methods=['GET']),

//++++++++++++++++++++++更新/分辨率+++++++++++++

  1. 打印语句很好,并打印到控制台

  2. 是的,cron 作业将在使用开发服务器下触发一次,尽管它不会重复

  3. 问题是该模块中的 _ah/start 被路由到一个永不停止的拉取队列。删除拉取队列解决了这个问题。

【问题讨论】:

  • 使用 print 通常会将打印的值作为响应返回给请求者,而不是打印到控制台。如果您希望内容显示在控制台上,您应该使用日志记录。
  • 奇怪.. print 语句在处理程序中被触发时总是打印到控制台.. 我已经做了几个月了.. 我知道我已经完成了一个简单的 cron 作业,它确实打印了到这样的控制台,唯一的区别是现在我正在使用单独的模块..它似乎在默认模块而不是工作模块上运行

标签: python google-app-engine cron


【解决方案1】:

这实际上是在本地执行 cron 作业时的预期行为。

如果您查看docs,它会显示以下内容:

开发服务器不会自动运行您的 cron 作业。您可以使用本地桌面的 cron 或计划任务界面,通过 curl 或类似工具触发作业的 URL。

正如您在帖子中提到的,您需要通过访问http://localhost:8000/cron 在本地服务器上手动执行 cron 作业。

【讨论】:

  • 大声笑,是的,这就是为什么这条评论没有太大帮助的原因;)。我确实“通过访问 localhost:8000/cron 在本地服务器上手动执行 cron 作业”,但它仍然没有打印出来。我还直接在浏览器中点击了链接。仅仅因为它不继续运行并不意味着它不应该执行一次
【解决方案2】:

/++++++++++++++++++++++更新/分辨率+++++++++++++

  1. 打印语句很好,并打印到控制台

  2. 是的,使用开发服务器时 cron 作业会触发一次,但不会重复,这是开发服务器的正常行为

  3. 问题是该模块中的 _ah/start 被路由到一个永不停止的拉取队列。删除拉取队列解决了这个问题。

  4. 感谢您的建议

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-03
    • 2017-10-22
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    相关资源
    最近更新 更多