在Django中使用Celery进行定时数据备份

2023-04-11 00:00:00 django 定时 数据备份

在Django中使用Celery进行定时数据备份,需要进行以下步骤:

  1. 安装Celery库和Redis数据库(用于存储任务)
pip install celery redis
  1. 在settings.py中添加Celery的配置信息
#Celery配置信息
CELERY_BROKER_URL = 'redis://127.0.0.1:6379/0'
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/0'

#定时任务配置信息
CELERYBEAT_SCHEDULE = {
    'backup-data-every-day':{
        'task':'myapp.tasks.backup',
        'schedule':crontab(hour=0,minute=0), #每天凌晨执行
        'args':(), #任务参数
    }
}
  1. 创建一个tasks.py文件,编写任务代码
from celery import shared_task
import datetime
import subprocess

@shared_task
def backup():
    #数据库备份命令
    cmd = 'mysqldump -u root -p密码 数据库名 > 备份文件路径'.format(datetime.datetime.now().strftime('%Y%m%d'))
    #执行备份命令
    subprocess.call(cmd, shell=True)
  1. 在Django项目启动时启动Celery
from celery import Celery

app = Celery('proj')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

@app.task(bind=True)
def test(self):
    print('test celery')
  1. 启动Celery

在终端中执行以下命令启动Celery

celery -A myproject worker -l info
celery -A myproject beat -l info

其中第一个命令用于启动Celery worker,第二个命令用于启动定时任务功能。

最后,只需要等待每天凌晨的备份任务自动执行即可。

相关文章