本文共 3914 字,大约阅读时间需要 13 分钟。
添加上了定时任务,在日志中,也发现了执行了日志, 需要创建的文件也创建了,但文件中,没有内容,重启也没什么反应;
经过学习:https://blog.51cto.com/8596219/2418298,找到了下面的内容 你需要用python manage.py crontab run xxxxxxxxxxxxxxxxxxx(此处为任务添加时生成的一串任务码,没有记录的话可通过crontab -l查看)手动运行,运行后就能看到任务执行的报错了,在本次手动运行后,发现在执行的函数中, 有一个函数的引用错误,这个方法,一下子,就把任务明明在执行,却没有执行结果的问题的解决了。
关于 需要执行的函数的路径的问题,经测试,确定是“appname.cron.classname"
本次还学习了一个查看日志的方法
linux(CentOS,Ubuntu,Debian……)
tail -f /var/log/cron
========================================================
crontab 语法
1.每分钟定时执行一次规则:
每1分钟执行: */1 * * * 或者 * * * * 每5分钟执行: */5 * * * *2.每小时定时执行一次规则:
每小时执行: 0 * * * *或者0 */1 * * * 每天上午7点执行:0 7 * * * 每天上午7点10分执行:10 7 * * *3.每天定时执行一次规则:
每天执行 0 0 * * *4.每周定时执行一次规则:
每周执行 0 0 * * 05.每月定时执行一次规则:
每月执行 0 0 1 * *6.每年定时执行一次规则:
每年执行 0 0 1 1 *7.其他例子
5 * * * * 指定每小时的第5分钟执行一次ls命令 30 5 * * * ls 指定每天的 5:30 执行ls命令 30 7 8 * * ls 指定每月8号的7:30分执行ls命令 30 5 8 6 * ls 指定每年的6月8日5:30执行ls命令 30 6 * * 0 ls 指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1,以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。] 30 3 10,20 * * ls 每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段] 25 8-11 * * * ls 每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段] */15 * * * * ls 每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ] 30 6 */10 * * ls 每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls命令。 ]==============================================
安装步骤:网上借鉴
1,安装 pip3 install django-crontab 2, 在django中配置 在apps中,注册,这是一个app,放在系统app之后就可以。 在最下边配置命令# 定时任务设置CRONJOBS = [ ('*/5 * * * *', 'RcHouse.cron.my_test_cron', '>> /home/cron3.log')]
在虚拟环境中,添加任务
python3 manage.py crontab add
删除任务
python3 manage.py crontab remove
查询任务
python3 manage.py crontab show
使用cron命令
在终端中: crontab -e # 编辑crontab -l # 查询任务crontab -r # 删除任务crontab -u #指定用户
有几个在排错中的疑虑可以澄清了:
1, 在虚拟环节中安装的插件, 就在虚拟环节中,添加任务, 不存在,虚拟环节不能执行cron的问题 2,crontab跟用户无关, 任务一个用户都可以执行自己的任务,在ubuntu中,执行sudo crontab -l
的时候,查询的是root的任务,sudo crontab -e
是编辑的root的任务, 不带sudo,就是编辑当前用户的cron, 再次重申,cron和用户无关, 虚拟环境在普通用户中,在普通用户中,就应该查到django-crontab的相关任务 ===================================================================
这个django-crontab,是在django内部,利用ubuntu等liunx系统的cron做的一个类似与windows的计划任务功能
通过扫描发现有以cron为文件名,而不同后缀的四个文件,这4个后缀为‘分,时,周,月’使用这个插件,本身是比较方便的,但在网上查到的资料本身不严谨,导致走了不少的弯路,主要出现在语法中
# 定时任务设置CRONJOBS = [ ('*/5 * * * *', 'RcHouse.cron.my_test_cron', '>> /home/bamboo/cron3.log')]
这条命令有三个参数:
第一个,是时间格式, 具体用法先不描述,一共5个*, 分别代表(分,时,天,周,月),最主要的是每个*之间,是英文状态下的‘空格’间隔,不能直接连着,不然会报错(py3-env) bamboo@bamboo-VLR-WX9:~/bigbee/bee$ python3 manage.py crontab add adding cronjob: (f47332ab8d82becf943a24bbfdc307f0) -> ('*/1* * * *', 'RcHouse.cron.my_test_cron', '>>/home/bamboo/tmp/cron.log')"/tmp/tmp9nsbw83k":0: bad day-of-weekerrors in crontab file, can't install.
第二个参数是命令
这个命令,从网上查到的是,说有两种格式,一种是运行django内部的,格式为 appname.filename.functionname, 这种格式,经过验证是正确的 第二个,是直接使用命令,如’date’('*/1 * * * *', 'date', '>> /home/cron_date.log')
这种格式就不成功,
但在系统本身的cron中,使用crontab -e
去使用手动编辑的模式,
*/1 * * * * date >> /home/bamboo/coo.log
在操作系统中,而不是django中,这个命令,就可以成功,是可以正常输出到指定文件的。
所以,第二个参数的格式和命令都很重要第三个参数, 是一个输出到指定文件的命令
这个命令的格式,也很重要 正确的格式为'>> /home/cron_date.log'
在网上,大多数的格式,是这样'>>/home/cron_date.log'
在>>
和文件路径/home/cron_date.log
必须有空格,不然就不会文件,也不会输出, 后边的文件路径,在文件不存在的情况下,是可以创建文件的,但目录不存在的话,就不能创建目录了,文件也就不能创建了。 正确的方式是,这个文件一定是要在一个已经存在的目录上。 总结:
这个django-crontab插件,是借助ubuntu(liunx)中的cron完成的计划任务,系统会定期扫描那4个文件,然后去执行命令。 如果能很好的理解cron, django-crontab的使用,会好很多。 在系统,默认cron,是不输出日志的。 如果想改为让cron输出日志,可以按照vi /etc/rsyslog.d/50-default.conf#取消如下行前边的注释cron.* /var/log/cron.log#重启rsyslog服务systemctl restart rsyslog.service# 查看日志cat /var/log/cron.log
介绍一下,我在排错中几个关键的步骤:
网上也有很多关于 开启cron 日志的介绍 1,通过观察日志,发现cron,会按照django的setting中设置的语法,进行操作,但操作没有结果输出 说明系统是的时间格式是正确的 2,发现没有新的文件生成,判断为在文件的路径方面,可能存在问题,在命令生效后,应该有指定的文件生成。 3,文件有生成,命令有执行,但文件没有内容,判断,命令有问题,在查阅大量百度资料后, 好像记得说,可能有点片面,说在django中,使用django-crontab插件,只能使用的命令格式为“appname.filename.functionname’, 而我在没有文件路径格式不正确的情况下,使用的是函数的方法,没有发现结果,我改成了’date’这个系统命令,我在cron中测试,是可以产生结果的,而django中,没有产生结果, 判断有可能命令有问题,所以,在文件能正常生成,在cron.log中,也能查到执行记录的情况下, 把命令又改成了django的函数, 这一次,就完全成功了。转载地址:http://tlvii.baihongyu.com/