Django定时任务
在Django执行定时任务,可以通过django-crontab
扩展来实现
-
安装 django-crontab
pip install django-crontab
-
注册 django-crontab 应用
INSTALLED_APPS = [ 'django_crontab', # 定时任务 ]
-
设置定时任务
定时时间基本格式 : * * * * * 分 时 日 月 周 命令 M: 分钟(0-59)。每分钟用 * 或者 */1 表示 H:小时(0-23)。(0表示0点) D:天(1-31)。 m: 月(1-12)。 d: 一星期内的天(0~6,0为星期天)。
定时任务分为三部分定义:
- 任务时间
- 任务方法
- 任务日志
CRONJOBS = [ # 每1分钟生成一次首页静态文件 ('*/1 * * * *', 'contents.crons.generate_static_index_html', '>> ' + os.path.join(os.path.dirname(BASE_DIR), 'logs/crontab.log')) ]
-
解决 crontab 中文问题
在定时任务中,如果出现非英文字符,会出现字符异常错误
CRONTAB_COMMAND_PREFIX = 'LANG_ALL=zh_cn.UTF-8'
-
管理定时任务
# 添加定时任务到系统中 $ python manage.py crontab add # 显示已激活的定时任务 $ python manage.py crontab show # 移除定时任务 $ python manage.py crontab remove
-
扩展(crontab循环定时任务(用户执行))
-
crond服务管理
# 查看crond是否安装 systemctl list-unit-files | grep crond # 没安装的话 yum install cronie # 设置开机启动 systemctl enable crond # 开机不启动 systemctl disable crond
-
访问控制
当系统中有/etc/cron.allow文件时,只有写入此文件的用户可以使用 crontab命令,
没有写入的用户不能使用 crontab命令;同样如果有此文件,/etc/cron.deny文件会被忽略,/etc/cron.allow文件的优先级更高,当系统中只有/etc/cron.deny文件时,则写入此文件的用户不能使用 crontab命令,没有写入文件的用户可以使用 crontab命令;
如果系统中这两个文件都不存在,那么只有root用户可以使用crontab命令; -
用户的 crontab设置
-
选项
-e:编辑 crontab定时任务 -l:查询 crontab任务 -r:删除当前用户所有的 crontab任务
-
****执行的任务
第一个 * 一小时当中的第几分钟 0-59 第二个 * 一天当中的第几小时 0-23 第三个 * 一个月当中的第几天 1-31 第四个 * 一年当中的第几月 1-12 第五个 * 一周当中的星期几 0-7(0和7都代表星期日) -
注意事项
- 六个选项都不能为空,必须填写。如果不确定使用“*”代表任意时间;
- crontab定时任务,最小有效时间是分钟,最大时间范围是月。像2018年某时执行,3点30分30秒这样的时间都不能识别;
- 在定义时间时,日期和星期最好不要在一条定时任务中出现,因为它们都是以天作为单位,非常容易让管理员混乱;
- 在定时任务中,不管是直接写命令,还是在脚本中写命令,最好都是用绝对路径;
-
-