Cron作业没有运行(在开发中)

时间:2011-08-30 20:51:40

标签: google-app-engine

我已经指定了一个cron作业(在开发中测试),但它似乎没有运行。如何确保工作在生产中有效?

cron.yaml:

cron:
- description: cron test gathering
  url: /test/cron
  schedule: every 2 minutes from 09:00 to 23:00

的app.yaml:

application: cron_test
version: 1
runtime: python
api_version: 1

handlers:
- url: /.*
  script: main.py

main.py:

url_map = [ ('/test/cron', test.CronHandler),
            ('/error', err.Err404Handler)]

application = webapp.WSGIApplication(url_map, debug=False)

def main():
    wsgiref.handlers.CGIHandler().run(application)

if __name__ == "__main__":
    main()

FeedCron定义为:

class CronHandler(webapp.RequestHandler):

    def get(self):      
        logging.info("NOTE: CronHandler get request");
        return None

我期待在应用引擎的日志中看到该行,“注意:CronHandler获取请求”。我正在使用GoogleAppEngineLauncher应用程序(版本:1.5.3.1187)来启动&停止应用程序。

4 个答案:

答案 0 :(得分:3)

D'哦!刚看到SDK文档中的细则:

  

使用Python SDK时,dev_appserver具有管理界面   允许您在/ _ah / admin / cron。

中查看cron作业      

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

答案 1 :(得分:3)

三年后情况有所改善。

首先,通往Cron Jobs的路线是:http://localhost:8000/cron

开发服务器(仍然)不会自动运行您的cron作业。但是,使用上面的链接可以做两件事:

  1. 点击“立即运行”按钮,实际上触发了URL(欢呼!)
  2. 请参阅时间表,该时间表应确保作业将在生产中运行

答案 2 :(得分:1)

我一直在寻找一种在本地开发服务器上模拟cron作业的方法。作为临时解决方案,我在本地运行一个python脚本,该脚本访问cron url并触发计划任务。

$query = User::find();

$query->joinWith(['books' => function ($subquery) {
    $subquery->onCondition(['book.status' => 1]);
}]);

$query->select(['user.*', 'COUNT(book.id) AS booksCount']);
$query->groupBy(['user.id']);
$query->orderBy(['booksCount' => SORT_DESC]);

在我的情况下,网址是import urllib2 import time while True: print urllib2.urlopen("http://localhost:9080/cron/jobs/") time.sleep(60) ,我每分钟都会运行它。 希望它可以提供帮助。

答案 3 :(得分:0)

好吧,我的UI&后端代码库是分离的。所以我在UI上添加了一些ajax代码来定期命中后端cron端点。 这模拟了我在本地开发环境中的cron作业。