我已经指定了一个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)来启动&停止应用程序。
答案 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作业。但是,使用上面的链接可以做两件事:
答案 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作业。