【Django】django-crontab的使用:

    • celery…
    • django-crontab
    • 使用流程
      • 安装
      • 添加app到setting.py里
      • 配置setting.py第一步
      • 自定义需要执行的函数
      • 配置setting.py第二步
        • 每隔N分钟执行一次
          • 遇到的bug
        • 固定时间执行
        • 指定运行的函数
      • 启动
    • crontab的运行时间举例:
    • Linux的crontab的使用
      • 不同用户具有不同的crontab

celery…

celery太麻烦了,目前还没掌握..

django-crontab

使用流程

安装

pip install django-crontab

添加app到setting.py里

INSTALLED_APPS = (
        'django_crontab',
        ...
    )

配置setting.py第一步

自定义需要执行的函数

新建一个函数,可以建在views里,也可以单独建立,我选择的单独的文件,方便修改.

def task():
    print '我是定时任务'

配置setting.py第二步

配置CRONJOBS

CRONJOBS = [
    ('*/5 * * * *', 'book.scheduled_task.refresh_task','>>/home/book.log')
]
  1. 代表执行时间或者周期
  2. 代表需要定时执行的函数(文件夹.py文件.functionname)
  3. 输出log信息的路径+log文件

这个需要放在settings.py里,实际开发的时候,我是放在一个单独的存放py文件里,导入使用的.也可以直接在settings.py修改

每隔N分钟执行一次

*/5 * * *’ 表示五分钟一次,而django-crontab是调用Linux的crontab.
遇到的bug

如果写
CRONJOBS = [
(‘/1 * * * *’, ‘book.scheduled_task.refresh_task’,’>>/home/book.log’)
]

如果第一个参数写成/1会报错,a bad minute

  adding cronjob: (d99049f006036f7b2de7f10db4c9771d) -> ('/1 * * * *', 'book.scheduled_task.refresh_task', '>>/home/book.log')
"/tmp/tmp5UR9mi":0: bad minute

正确写法,

*/1,*/5
CRONJOBS = [
    ('*/1 * * * *', 'book.scheduled_task.refresh_task','>>/home/book.log')
]

固定时间执行

('55 16 * * *', 'book.scheduled_task.refresh_task','>>/home/book.log')

这样表示的是每天的16:55分执行

指定运行的函数

第二个参数是运行的函数的地址

启动

  1. 以上都完成,需要执行
python manage.py crontab add

如果报错

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

就可以了.

还有就是django-crontab必须在Linux的crontab开启的情况下方可使用,不然会出现不执行的情况

2.显示当前的定时任务

python manage.py crontab show

3.删除所有定时任务

python manage.py crontab remove

4.常用命令

crontab -e  ## 编辑定时任务

crontab -l ## 查看定时任务

5.常见的参数

“*” 表示可选的所有
“/”代表”每”, 比如若第一个参数为/5,就是五分钟一次

crontab的运行时间举例:

crontab范例
    每五分钟执行    */5 * * * *

    每小时执行      0 * * * *

    每天执行        0 0 * * *

    每周执行        0 0 * * 0

    每月执行        0 0 1 * *

Linux的crontab的使用

直接 crontab -e 编辑就可以
时间格式和上面django-crontab一样
如果是Python程序,直接Python 路径/py文件
比如:

*/5 * * * * python /pwd/tianqi.py
## pwd表示py文件的绝对路径
# */5表示每五分钟

不同用户具有不同的crontab

无意间发现..不同用户具有不同的crontab,crontab -e编辑显示的内容也不同

你可能感兴趣的:(Django开发,Python,Linux)