Создание сайта на Django: урок 53, резервная копия базы данных по расписанию в Django
avatar
7 | (offline)
❤️‍🔥Notehunter Developer
Добавлено:
Категория: Руководства «Django»
Комментариев: 0

В этом уроке по Django 4.1 мы рассмотрим добавление нашей кастомной команды по резервному копированию базы данных в исполнение по расписанию с помощью Celery.

Напоминаю, что советую посмотреть 2 урока перед выполнением 53 урока:

И сам код содержится в уроке для команды dbackup:

Создание сайта на Django: Урок 52, создание собственных команд (резервное копирование базы данных) 

Создадим задачу для Celery

modules/system/services/tasks.py

from celery import shared_task
from celery.utils.log import get_task_logger
from django.core.management import call_command

from modules.system.services.email import send_activate_email_message

logger = get_task_logger(__name__)


@shared_task
def send_activate_email_task(email):
    """
    1. Получение из view регистрации
    2. Отправка через функцию send_activate_email_message
    """
    return send_activate_email_message(email)


@shared_task()
def db_backup_task():
    """
    Выполнение резервного копирования базы данных
    """
    logger.info('Backup database starting')
    call_command('dbackup',)

Пояснение:

  • Добавил код из файла целиком, с контентом из прошлых уроков.
  • Создали функцию db_backup_task(), в которой вызывается команда dbackup

Для того, чтобы добавить задачу по расписанию, мы должны добавить определенный конфиг в конфигурационный файл Django проекта.

backend/settings.py

CELERY_BEAT_SCHEDULE = {
    'dbackup_task': {
        'task': 'modules.system.services.tasks.db_backup_task',
        'schedule': crontab(minute=0, hour=0),
    },
}

Пояснение:

  • Создаем конфиг с переодическими задачами.
  • Задача dbackup_task, будет выполняться каждый день в полночь crontab(minute=0, hour=0)
  • Путь к задаче: modules.system.services.tasks.db_backup_task

И просто запускаем наш проект с Celery, но запускаем его уже с новым флагом:

celery -A backend worker -B --loglevel=info

Флаг -B активирует работу Celery по расписанию.

[tasks]
  . modules.system.services.tasks.db_backup_task
  . modules.system.services.tasks.send_activate_email_task

При запуске Celery мы видим, что задача зарегистрирована в списке задач. А значит, каждую полночь она будет запускаться.

После запуска работы Celery по расписанию с флагом -B, у вас также в корне проекта появится файл: celerybeat-schedule

Подробнее о задачах можно почитать на официальном сайте Celery

Комментарии к статье 0
Комментариев нет
Форма добавления комментария (необходима регистрация)