Crontab定时任务
crontab
官方链接:https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/crontab.html
在做一个django项目的时候,我遇到了一个定时任务的需求,我这里是需要定时扫描数据库并发送邮件,在查阅相关资料后,总结出如下几个方法
- 使用while创建一个死循环,判断时间,从而执行一些函数
 - 使用APScheduler库实现定时任务 (详情可以见http://blog.csdn.net/hui3909/article/details/46652623)
 - django-crontab实现定时任务
 - django-celery实现定时任务
 
django-crontab实现定时任务
在我斟酌再三,最终还是选择了django-crontab这个方法,这个方法最契合我的需求,同时也相对简单,所以本文也就着重介绍一下
django-crontab安装
安装django-crontab库
这里使用pip安装即可,在终端输入以下命令即可
pip install django-crontab
在工程里使用django-crontab
在django项目的settings.py的INSTALLED_APPS添加django-crontab

如图示即可
django-crontab配置
django-crontab可以定时运行自定义命令和函数两种方式
定时函数
在django项目的settings.py中添加以下命令
CRONJOBS = (
    ('*/1 * * * *', '你的app名.定时函数所在的py文件名.定时函数名'),
    ('0   0 1 * *', '你的app名.定时函数所在的py文件名.定时函数名', '>> 输出文件路径和名称'),
)
- 第一种的意思就是每一分钟执行一次你的定时函数
 - 第二种时定时函数输出的内容到指定文件(如果该路径或文件不存在将会自动创建)
 
定时命令
CRONJOBS = (
    ('10 12 * * *', 'django.core.management.call_command', ['要执行的命令']),
)
- 意思是在12点10分执行命令
 
定时任务的操作
- python manage.py crontab add 添加定时任务
 - python manage.py crontab remove 清除定时任务
 - python manage.py crontab show 显示定时任务
 
- 当你添加了或者修改的定时任务,只需执行命令1即可
 - 如果你想删除定时任务,请执行命令2
 
注:
- 当定时任务执行时,如果你只是一些输出语句,那么你将看不到任何内容。请不要怀疑没有执行
 - 上述环境在ubuntu16.04 lts django1.9中测试成功
 - 上述文字皆为个人看法,如有错误或建议请及时联系我
 
链接:https://www.jianshu.com/p/27f003149090
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
查看crontab日志
1. linux
看 /var/log/cron.log这个文件就可以,可以用tail -f /var/log/cron.log观察
2. unix
在 /var/spool/cron/tmp文件中,有croutXXX001864的tmp文件,tail 这些文件就可以看到正在执行的任务了。
3. mail任务
在 /var/spool/mail/root 文件中,有crontab执行日志的记录,用tail -f /var/spool/mail/root 即可查看最近的crontab执行情况。
注:Ubuntu 默认没有开启cron log.
vim /etc/rsyslog.d/50-default.conf #cron.* /var/log/cron.log #去掉注释符号#, sudo service rsyslog restart #重启rsyslog sudo service crontab restart #重启crontab
示例
CRONJOBS = (
    ('*/1 * * * *', 'apps.index.test.do_something', '>>/tmp/cron.log'),
)
apps.index.test.py
def do_something():
    print(123)
错误汇总
/tmp/cron.log没有日志打印,排查
1、apps.index.test.do_something,注意路径是否正确,apps在项目根目录
2、重启系统cron
更新系统时间时区后需要重启cron,在ubuntu中服务名为cron:
$service cron restart
ubuntu下启动、停止与重启cron:
$sudo /etc/init.d/cron start $sudo /etc/init.d/cron stop $sudo /etc/init.d/cron restart
3、Ubuntu 默认没有开启cron log.
vim /etc/rsyslog.d/50-default.conf 
#cron.* /var/log/cron.log #去掉注释符号#, 
sudo service rsyslog restart #重启rsyslog 
sudo service crontab restart #重启crontab
123
                    
                
                
            
        
浙公网安备 33010602011771号