问题记录
最近项目中有一个需求—>定时修改状态,在django中执行定时任务,有两种方法
- django-celery
- django-crontab
最后使用django-crontab(windows无法使用),使用过程:
- 首先在环境中安装django-crontab
pip install django-crontab
- setttings.py中配置
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_crontab'
)
# 在settings.py中可以这么使用:
CRONJOBS=(
# 每一分钟执行一次你的定时函数
('*/1 * * * *', 'django.core.management.call_command', ['runtimed'], {}, f'>>{CRON_PATH}/cron_user.log'),
)
- 管理crontab
python manage.py crontab add # 添加
python manage.py crontab show # 查看
python manage.py crontab remove # 删除
以上是简单的使用以及配置。我原本以为的也是这么简单,但问题终究是发生了。添加crontab定时任务以后,指定日志文件中并没有得到相应的日志记录 那么这个定时任务是运行成功了呢? 还是运行不成功呢?指定是没有运行成功的
反复检查,焦头烂耳也没有找到问题所在之处。各种资料查找。终于找到了解决方案得以解脱,发现问题所在就好办了, 接下来就消灭它。以下是重点,总结了我查找的资料及解决方案。
- 首先查看cron系统日志。cron日志默认是没有开启的,所以需要我们开启以下
ubuntu 系统
sudo vim /etc/rsyslog.d/50-default.conf
cron.* /var/log/cron.log #找到这一句 将cron前面的注释符去掉
重启syslog
sudo service rsyslog restart
- 然后查看cron.log 是否正常执行
sudo vi /var/log/cron.log
然后我找到了我的问题所在之处
(CRON) info (No MTA installed, discarding output) 这个报错的主要原因是没有配置邮件服务器
- 接下来我们要安装一下邮件服务器
sudo apt-get install postfix
安装完毕后,再次看一下cron.log,发现没有错误信息了,但是指定的日志记录还是没有。这是会发现终端会提示 You have new mail.
查看提示邮箱信息
vi /var/mail/ubuntu
原来提示我,日志路径没有权限。 重新赋予权限即可
大功告成 !!! 完美解决 !!!
备注: 我是用的cronjobs是 Command 命令 参考文章