博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我在ubuntu19.1使用django-crontab 执行服务器定时任务
阅读量:4094 次
发布时间:2019-05-25

本文共 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 * * 0

5.每月定时执行一次规则:

每月执行 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/

你可能感兴趣的文章
Leetcode 834. 树中距离之和 C++
查看>>
【机器学习】机器学习系统SysML 阅读表
查看>>
最小费用最大流 修改的dijkstra + Ford-Fulksonff算法
查看>>
最小费用流 Bellman-Ford与Dijkstra 模板
查看>>
实现高性能纠删码引擎 | 纠删码技术详解(下)
查看>>
scala(1)----windows环境下安装scala以及idea开发环境下配置scala
查看>>
zookeeper(3)---zookeeper API的简单使用(增删改查操作)
查看>>
zookeeper(4)---监听器Watcher
查看>>
zookeeper(2)---shell操作
查看>>
mapReduce(3)---入门示例WordCount
查看>>
hbase(3)---shell操作
查看>>
hbase(1)---概述
查看>>
hbase(5)---API示例
查看>>
SSM-CRUD(1)---环境搭建
查看>>
SSM-CRUD(2)---查询
查看>>
SSM-CRUD (3)---查询功能改造
查看>>
Nginx(2)---安装与启动
查看>>
springBoot(5)---整合servlet、Filter、Listener
查看>>
C++ 模板类型参数
查看>>
C++ 非类型模版参数
查看>>