Openshift - 警告:每周cron运行终止,因为它超过了最大运行时间

时间:2015-04-03 15:49:24

标签: cron openshift

我有一个脚本可以在openshift上更新几千条记录。每次请求后,它会休息1秒钟。所以我不满足[5分钟] [1]。我正在使用nohup,但无论如何,openshift杀死了那个脚本。 这是我的nohup:

#!/bin/bash
nohup /var/lib/openshift/526ed6ba4382eca7ff000024/python/virtenv/bin/python /var/lib/openshift/526ed6ba4382eca7ff000024/app-root/runtime/repo/wsgi/digrin/manage.py crontab run 2d73136da64a34e81327609dd1dfe69b & # update_historic_price_cron

日志:

/var/lib/openshift/526ed6ba4382eca6ff000024/cron/bin/cron_runjobs.sh: line 111: 294808 Killed                  $executor "$SCRIPTS_DIR"
__________________________________________________________________________
Tue Apr  7 17:21:10 EDT 2015: END hourly cron run - status=137
__________________________________________________________________________

Warning: hourly cron run terminated as it exceeded max run time
________________________________________________________________

Openshift在20分钟后杀死它。有没有办法延长cron的运行时间?我只需要每年运行一次,但我已经把它放在每周一次。

2 个答案:

答案 0 :(得分:0)

在每个请求之间休息1秒钟将使您的脚本运行更长时间,而不是在5分钟的时间内保存。您应该删除脚本的这一部分,以便它更快地运行。

另一个建议是批量运行您的更新,每次可以根据上次更新的时间戳或其他内容选择几百个更新。

使用&把你的脚本放到后台应该工作。你可以发布你正在使用的cron文件的内容吗?

答案 1 :(得分:0)

基本上我不知道如何避免20分钟的运行时间限制。但我使用了一些解决方法。如果需要,您可以每小时运行一次并在内部过滤已处理对象的数量。

将数据库对象划分为部分

limit_per_query = int(Stock.objects.count() / 23)  + 10
hour = datetime.now().hour
for stock in Stock.objects.all().order_by("symbol")[hour*limit_per_query:hour*limit_per_query+limit_per_query]:
    stock.update() ...

如果你只需要每月/每年运行一次cron,你可以将它添加到每小时/每日cron文件夹然后限制方法:

def update_spinoff_cron():
    if (datetime.now().day not in [1,2]):
        print("I am not updating spinoff today :) may be tomorrow.")
        return
    spinoff_update()