В этой статье я поделюсь скриптом для создания бэкапов БД PostgreSQL за определенный период (например: 1, 2, 3 дня, 1 неделя, 1 месяц, 6 месяцев, каждый год).Объясню как запустить скрипт с помощью расписания crontab, покажу как настроить синхронизацию папки с бэкапами с облаком Yandex Disk. Ссылка на репозиторий с python скриптом для создания бэкапов:https://github.com/oktend/server-backup-example Добавление расписания в crontab:   Синхронизация с Yandex Disk Меня зовут Вадим Резвов, я начинающий системный администратор. В мои обязанности входит: мониторинг состояния всех основных сервисов и систем проекта, создание бэкапов, поддержка ключевых компонентов сервера. В одном из моих текущих проектов возникла задача - создавать регулярные бэкапы БД PostgreSQL за определенные отрезки времени (1, 2, 3 дня, 1 неделя, 1 месяц, 6 месяцев, каждый год - такое расписание я сформировал по запросу заказчика, чтобы была возможность откатиться на короткий, средний или длинный срок), также бэкап включает в себя папку с media и static контентом. Регулярные бэкапы необходимы для того, чтобы была возможность восстановиться до последней работающей версии сервера. В зависимости от того насколько давно возникла ошибка, можно откатиться на 1 день, месяц, год и т.д. - расписание можно поменять в server-backup-example/src/main.py, в 35-44 строке, все числа указаны в днях: Бэкап попадающий в интервал между: 0 и 1, - бэкап за 1 день, 1 и 2, - за 2 день, 2 и 3, - за 3 день, 3 и 7, за 1 неделю, 7 и 30, за 1 месяц, и т.д. В каждом интервале всегда находится только 1 бэкап попадающий в интервал, другой бэкап либо сдвигается в следующий интервал, либо удаляется. Бэкапы в интервале после 360 - создаются за каждый год, и не удаляются. Сообщения об ошибках и успешных бэкапах будут приходить в “Support” Telegram топик, - это сделано для того, чтобы постоянные сообщения о бэкапах не спамили в основной топик. Решение задачи по отправке сообщений в определенный Telegram topic я описал в прошлой статье: https://habr.com/ru/articles/770582/ Репозиторий с кодом для создания бэкапов:https://github.com/oktend/server-backup-example Рассмотрим основные моменты в коде: Функция create_dump_postgres делает dump БД PostgreSQL: Функция create_backup_file архивирует dump БД (sql файл) и папку media в один файл формата tar.gz Список BACKUPS_TIMETABLE далее используется в функции rotate_backups, чтобы удалить лишние бэкапы в определенных интервалах: По всему коду раскинуто логирование, например: В файле src/log.py в 33 строке, можно установить определенный уровень логирования, чтобы получать только важные сообщения (по уровню критичности логи имеют следущий порядок: DEBUG, INFO, WARNING, ERROR, CRITICAL), начиная с установленного уровня сообщения будут прилетать в Telegram топик: В .env файле прописываете правильные значения переменных: В данном примере полный путь до директории (/home/user/your_project_repo/static_content/media),я разбил на две переменные MEDIA_DIRPATH=/home/user/your_project_repo/static_content/ иMEDIA_DIRNAME=media, это нужно для корректной работы скрипта.Если у вас нет media контента, в MEDIA_DIRPATH пропишите путь до любой фейковой директории, не включая саму директорию, а в MEDIA_DIRNAME укажите название самой директории. В файле src/log.py функция init_logger берет из .env файла ранее указанные значения bot_token, chat_id, message_thread_id, на их основе сообщения отправляются в определенный Telegram топик: Как узнать значения bot_token, chat_id, message_thread_id, я рассказывал в прошлой статье: https://habr.com/ru/articles/770582/ После окончания редактирования, в папке репозитория (server-backup-example) нужно выполнить следующие команды установки python, poetry, чтобы подготовить репозиторий к работе: Чтобы бэкапы автоматически создавались по расписанию, будем использовать crontab, который будет выполнять по указанному расписанию определенную команду (запуск скрипта по созданию бэкапа). Для начала скачиваем crontab: Далее нужно настроить расписание crontab, для этого прописываем команду: и добавляем последнюю строку, запускающую backup скрипт, весь остальной не используемый код должен быть закомментирован: В записи "0 3 * * *" 0 - минуты, 3 - часы, * - дни, * - месяцы, * - день недели(1-7), например 1 - это понедельник. В данной записи бэкап создается каждый день в 3 часа ночи по серверному времени. Далее в ручную запускаем команду из crontab, чтобы проверить создается ли бэкап: Чтобы при возникновении каких-либо проблем с хранилищем на сервере мы не потеряли файлы бэкапов, имеет смысл привязать папку с бэкапами на сервере к папке с бэкапами в облачном хранилище, например Yandex Disk. Для синхронизации понадобится аккаунт Yandex Disk, если его нет, нужно зарегистрировать новый: https://passport.yandex.ru/registration?mode=register  Для начала, нужно скачать yandex disk cli: Далее запускаем настройку синхронизации: Когда запросят, выбираем путь к папке с бэкапами (та же папка, которую указали в .env файле: /home/user/backups), которая будет синхронизироваться с yandex диском. Теперь бэкапы должны создаваться по расписанию и синхронизироваться с облаком Yandex Disk. Надеюсь моя статья будет полезна тем, кто хочет настроить создание бэкапов для своего сервера. Буду рад любой критике, комментариям, отзывам. System Administrator