Openshift - 警告:每周 cron 运行 因超过最大 运行 时间而终止

Openshift - Warning: weekly cron run terminated as it exceeded max run time

我有一个脚本可以更新 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 更长?我只需要每年 运行 一次,但我已将其放在每周目录中。

在每个请求之间休眠 1 秒将使您的脚本 运行 更长,而不是让您免于 5 分钟超时。您应该删除脚本的那部分,以便它 运行s 更快。

另一个建议是 运行 分批更新,也许 select 每次根据上次更新的时间戳或其他内容更新几百次。

使用 & 将您的脚本置于后台应该可以。您可以 post 您正在使用的 cron 文件的内容吗?

基本上我不知道如何避开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 一次 month/year,你可以将它添加到 hourly/daily 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()