Итоговый проект — резервное копирование

Скрипт, которому можно доверить ночную копию боевого сервера

Прогресс курса Модуль 9 из 9

Что покажет проект

01

Постановка

На сервере работает сайт в /var/www/site, конфигурация nginx — в /etc/nginx. Нужен скрипт backup, который каждую ночь делает копию, хранит заданное число последних копий, проверяет их и сообщает о сбое. Настройки — в отдельном файле, чтобы менять их без правки кода.

# /etc/backup.conf
SOURCES="/var/www/site /etc/nginx"
DEST=/srv/backup
KEEP=7
$ sudo backup -h
Использование: backup [-n] [-v] [-c ФАЙЛ_НАСТРОЕК]
  -n  пробный прогон: показать действия, ничего не менять
  -v  подробный вывод
  -c  файл настроек (по умолчанию /etc/backup.conf)
$ sudo backup -v
[info] старт, источники: /var/www/site /etc/nginx
[info] архив /srv/backup/backup-2026-10-14_031002.tar.gz, 1,2M, проверен
[info] ротация: хранится 7, удалено 1
[info] готово за 3 с
02

Что должно получиться

ТребованиеМодуль
Опции -n, -v, -c, -h; проверка настроек: источники существуют, KEEP — число ≥ 105
Архив с датой и временем в имени, gzip -t, файл .sha256 рядом08
Ротация по количеству — только после успешной новой копии08
set -euo pipefail, временные файлы через mktemp и trap, блокировка flock07
Журнал через logger -t backup, ошибки — в stderr, осмысленные коды возврата03, 07
Таймер systemd с Persistent=true08
Без замечаний ShellCheck01

Порядок работы

  • Сначала скрипт с пробным прогоном -n — он только печатает, что сделал бы.
  • Затем настоящий запуск руками, проверка архива и восстановление из него во временный каталог.
  • Затем сбои: недоступный источник, переполненный каталог копий (подсказка: маленький образ диска или DEST на tmpfs размером 1 МБ), двойной запуск.
  • В конце — таймер и проверка через systemctl start backup.service и journalctl.

Подробные требования, что сдаётся и критерии оценивания — в задании на портале.

Практические задания — на учебном портале. Задания, критерии оценивания, сдача работ и оценки преподавателя — в курсе на portal.nevabit.ru. Учётную запись выдаёт преподаватель.

Курс пройден

Вы умеете писать скрипты, которые работают без присмотра: принимают опции, проверяют входные данные, останавливаются при ошибке, убирают за собой, ведут журнал и запускаются по расписанию. Этого достаточно, чтобы автоматизировать большую часть рутины администратора. Дальше — управлять многими серверами декларативно в курсе «Основы Ansible» и запускать скрипты в конвейерах проверки и выкладки в курсе «Основы CI/CD».

Модуль 08: Расписание Все модули Все курсы