我正在尝试使用 Django-cron在我的 Django 服务器上定期运行脚本。似乎 cronScheduler 正在将测试类注册为“类运行”打印到我的终端,但我没有发现任何迹象表明作业正在运行(即我没有看到“作业运行”打印到终端)。如果我不应该依赖打印来了解作业是否正在运行,我还观察了我数据库中的 django_cron_job 表几分钟,以查看作业的“last_run”值在最初向我的服务器发送请求后是否发生了变化但我发现它没有。
只是让你知道:每次我测试时,我都会用一个请求访问我的服务器,以便作业开始,我修改了我的设置文件中的 CRON_POLLING_FREQUENCY 使其低于 run_every 我为作业指定的值,并且还确保根据此帖子的建议将作业设置为排队:Similar problem .
为了解决我最初遇到的错误(“AttributeError:'Settings' object has no attribute 'PROJECT_DIR'”),我将我的 PROJECT_DIR 设置为 os.path.dirname(__file__)在 settings.py 中。这会是个问题吗?
当我启动服务器时,我也得到以下信息,但我已经调查过了,但找不到任何原因导致它出现问题:
“RuntimeWarning: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 日期对其进行了测试,并按预期获得了打印输出。现在我只需要弄清楚如何解决这个与时区相关的问题。希望这可以帮助别人!
