我正在尝试使用Django cron在我的Django服务器上定期运行脚本。似乎cronScheduler正在将测试类注册为"类运行"打印到我的终端,但我没有发现任何指示该作业正在运行(即,我没有看到"作业运行"打印在终端)。如果我不应该依靠打印来知道作业是否正在运行,我还会观察数据库中的django_cron_job表几分钟,看看在最初向服务器发送请求后,作业的"last_run"值是否发生了更改,但我发现它没有。
正如你所知:每次我测试时,我都会向服务器发出一个请求,以便启动作业,我会将设置文件中的CRON_POLLING_FREQUENCY
修改为低于我为作业指定的run_every
值,并确保作业设置为按照这篇文章的建议排队:类似的问题。
为了解决我最初得到的一个错误("AttributeError:'sSettings'对象没有属性'PROJECT_DIR'"),我在Settings.py中将PROJECT_DIR设置为os.path.dirname(__file__)
。这会有问题吗?
当我启动服务器时,我也得到了以下信息,但我已经调查过了,找不到任何原因导致它出现问题:
"运行时间警告:时区支持处于活动状态时,DateTimeField收到一个初始日期时间(2013-07-23 13:55:56.016085)。"
唯一需要注意的是,我经常在重新启动服务器并向服务器发出请求几秒钟后,将以下打印输出检索到我的终端,但在我重新启动服务器之前,这种情况只发生一次:
"已在执行哎呀!pid为17099的进程未运行。正在修复数据库中的状态。正在验证模型。。。"
我的cron.py文件:
from django_cron import cronScheduler, Job, HOUR, DAY, WEEK, MONTH
import sys
class Test(Job):
print "class ran"
run_every=2
def job(self):
print "job ran"
cronScheduler.register(Test)
明白了:我在发布后再次查看了几次,注意到数据库中的last_run
日期比我当前的时间早了几个小时,所以我的工作认为不需要开始,直到它最终达到那个时间+我的run_every
规范。因此,DateTimeField RuntimeWarning毕竟是问题所在。我通过手动更改last_run日期对其进行了测试,并获得了预期的打印输出。现在我只需要弄清楚如何解决这个与时区相关的问题。希望这能帮助到别人!