在做一个项目时,需要定期生成静态页面,使用到了Django-crontab。过程中被在项目终端下可以执行成功,但自动执行出错(或者不执行)的现象折磨,这里记录一下,供大家和自己以后遇到了参考。
1、问题描述
安装 django-crontab 并注册,添加:
走到这步可以说明,我们的定时任务已经添加进定期任务表里了:
此时问题出现了
在项目终端下可以执行成功,但自动执行出错
自己执行时候报错:
找不到模板,但是我已经添加过了。
最后发现问题所在:
# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent
Django 项目的路径组织,执行的时候从当前路径下寻找,如果执行的目录和它不同,这里就会找不到BASE_DIR
相关的文件、目录。
所以,项目的运行要和工程下 由 manager.py的一致。
2、问题解决:
通过添加前缀,可以调整任务表里的任务执行的地址:
将之前的任务删除,再重新添加:
fan@ubuntu:Dmall$ crontab -l
*/1 * * * * cd /home/fan/PycharmProjects/Dmall/Dmall && /home/fan/PycharmProjects/Dmall/venv/bin/python /home/fan/PycharmProjects/Dmall/Dmall/manage.py crontab run e2cb7a9f4fe20cf557d549718eec32e9 >> /home/fan/PycharmProjects/Dmall/Dmall/logs/crontab.log # django-cronjobs for Dmall
补充
后面发现是这里路径之前加的有问题
修改后
同时,这里的前缀也可以去掉。
总结
项目的路径和依赖一定要仔细检查,解决问题的分析过程还是有瑕疵,路径虽然可以用加前缀的方式解决,但是引入了不必要的东西。