【问题标题】:Google Appengine runs Cron tasks even if they are no cron.yaml file defined即使没有定义 cron.yaml 文件,Google Appengine 也会运行 Cron 任务
【发布时间】:2014-07-30 21:58:59
【问题描述】:

即使我没有定义单个 cron.yaml 文件,我也会开始从 CRON 服务接收错误。

cron 任务每 4 小时运行一次。

我真的不知道在哪里可以纠正这种行为。请告诉我需要什么样的信息来纠正错误。

定时任务

第一个 Cron 错误

Cron Job : /admin/push/feedbackservice/process - 查询 APNS 反馈服务并移除非活动设备

计划/上次运行/上次状态(所有时间均为 UTC): 每 4 小时 (UTC) 2014/06/10 07:00:23 准时失败

第二个 Cron 错误

Cron 作业: /admin/push/notifications/cleanup - 删除不再需要的已处理通知记录

计划/上次运行/上次状态(所有时间均为 UTC): 每天 04:45 (America/New_York) - 2014/06/09 04:45:01 准时失败 p>

控制台日志

2014-06-10 09:00:24.064 /admin/push/feedbackservice/process 404 626ms 0kb AppEngine-Google; (+http://code.google.com/appengine) module=default version=1 0.1.0.1 - - [10/Jun/2014:00:00:24 -0700] "GET /admin/push/feedbackservice/process HTTP/1.1" 404 113 - "AppEngine-Google; (+http://code.google.com/appengine)" "xxx-dev.appspot.com" ms=627 cpu_ms=353 cpm_usd=0.000013 queue_name=__cron task_name=471b6c0016980883f8225c35b96 loading_request=1 app_engine_release=1.9.5 instance=00c61b17c3c8be02ef95578ba43 I 2014-06-10 09:00:24.063

This request caused a new process to be started for your application, and thus caused your application code to be loaded for the first time. This request may thus take longer and use more CPU than a typical request for your application.

【问题讨论】:

  • 您是否运行了多个版本?!也许你曾经有过 cron 工作......
  • @Lipis 这是一个有趣的评论。我看到使用 Java 的两个部署版本的代码,这是一种未使用的语言。一位开发人员可能在一周前部署了错误版本的代码?!?我会删除那些未知版本,看看错误是否消失。
  • 在第一行部署 cron.yaml 并仅使用 'cron:' 将删除之前添加的任何内容。
  • @Greg,我创建并部署了 2 个文件 queue.yaml,cron.yaml;它们是“空的”。请注意,文件已存储在每个模块中。但是,同样的错误仍然存​​在,知道吗?

标签: google-app-engine python-2.7 cron


【解决方案1】:

上面@Greg 的提示为我解决了这个问题。

注意完整的事件顺序:

  1. 该应用程序的旧版本包含一个每小时运行一次的 cron.yaml 文件

  2. 在后续版本中,我删除了 cron.yaml 文件,以为这就够了,但后来我发现 cron 作业仍在运行!

  3. 上传 EMPTY cron.yaml 文件也没有改变

  4. 上传一个仅包含“cron:”的 cron.yaml 文件就可以了 - cron 作业刚刚停止。

从上面我认为事情的工作方式是这样的:当找到一个 cron.yaml 文件时,它会被解析,如果语法正确,它的 cron 作业就会被加载到应用服务器中。显然,只是从后续版本中删除 cron.yaml 文件,或者加载一个空文件(即不可解析、语法错误)并不会删除 cron 作业。删除 cron 作业的唯一方法是加载一个新的 PARSEABLE cron.yaml 文件,即使用“cron:”行,但之后没有实际作业。

而且布丁的证据是,在你这样做之后,你现在可以从后续版本中删除 cron.yaml,那些旧的 cron 作业将不会再回来了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    • 2021-09-17
    • 2021-12-15
    • 1970-01-01
    • 1970-01-01
    • 2018-11-20
    相关资源
    最近更新 更多