django-crontab 部署

需求:再指定的时间内输入django的自定义指令,来进行一些需求的操作。
使用流程:
1.安装:
pip install django-crontab
2.配置 settings.py文件:
再settings.py 文件中添加 django-crontab:

INSTALLED_APPS = (
...
'django_crontab',
)

3.配置django-crontab:
再settings.py中添加一下命令:

CRONJOBS = [
# 定时函数每分钟执行一次
('*/1 * * * *', '你的app名.定时函数所在的py文件名.定时函数名'),
# 将定时函数执行结果输出到指定文件(如果该路径或文件不存在将会自动创建)
('*/1 * * * *', '你的app名.定时函数所在的py文件名.定时函数名', '>> 输出文件路径和名称')
]

如果要再指定的时间内输入django自定义的指令,其实还可以定时函数:

CRONJOBS = (
# 每天早上6点执行命令
('0 6 * * *', 'django.core.management.call_command', ['要执行的命令']),
)

注意:要执行的命令,直接输入你django项目中自定义的指令就好,不需要添加python manage.py xxxxx(自定义指令)

操作命令:
查看系统中已有的定时任务:

python manage.py crontab show

添加和修改定时任务:

python manage.py crontab add

删除定时任务:

python manage.py crontab remove

注意事项:
1:该django-crontab : 不能再win系统上操作。
2:如果再操作命令的时候报错:
RuntimeError: No job with hash 18a9888406b9f5486e6b7ea52ee68dbf found. It seems the crontab is out of sync with your settings.CRONJOBS. Run “python manage.py crontab add” again to resolve this issue!

解决方案:意思就是修改过了,可以再执行一次命令就好:

python manage.py crontab add

3:django-crontab 必须再linux的crontab开启的情况下才可以使用。
4:如果你测试有没有跑通的时候,输入的只是一个print()语句的话,那么你将看不到任何内容。
可以再/var/spool/mail/root中查看你的输入语句:
一般这种情况mail的内容就只是一些正常的系统信息或者是比较重要的错误报告。如果你安装了mutt的话直接用这个命令就可以查看mail的内容(用root登陆先),没有装的话用cat /var/spool/mail/root查看(用root登陆先)。
crontab的运行时间举例:
crontab范例 :

每五分钟执行    */5 * * * *

每小时执行 0 * * * *

每天执行 0 0 * * *

每周执行 0 0 * * 0

每月执行 0 0 1 * *

crontab 常用命令:
crontab -e 编辑定时任务
crontab -l 查看定时任务

还可以使用shell脚本来实现定时执行自定义指令:

写一个shell脚本来自动运行:

创建一个shell脚本:

#!/bin/bash/usr/bin/python /xxx/xxx/xxx/manage.py sss
xxx:manage.py 所在的目录下的绝对路径
切换到manange.py 所在的目录 pwd:查看当前的路径。
sss:代表你django中自定义的指令
输入命令:crontab -e 编辑定时任务:

输入

0 16 * * * /xxx/xxx/xxx/lhq.sh > /xxxx/xxxx/xxxx/log.log 2>&1
1
0 16 * * *代表的是,每天的16点进行一次操作

把lhq.sh 刚才创建的shell脚本放到跟manage.py同级目录下:

xxx代表的是:绝对路径

lhq.sh 后面的 > /xxxx/xxxx/xxxx/log.log 2>&1 导入log日志 xxxx 代表的是导入log日志的绝对路径。

注意:

可能此刻crontab没有跑起来, 去查看log 日志会提示你Permission denied

解决方案:chmod 777 lhq.sh 就Ok了。