Скрипт, которому можно доверить ночную копию боевого сервера
trap, блокировку и журналНа сервере работает сайт в /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 с
| Требование | Модуль |
|---|---|
Опции -n, -v, -c, -h; проверка настроек: источники существуют, KEEP — число ≥ 1 | 05 |
Архив с датой и временем в имени, gzip -t, файл .sha256 рядом | 08 |
| Ротация по количеству — только после успешной новой копии | 08 |
set -euo pipefail, временные файлы через mktemp и trap, блокировка flock | 07 |
Журнал через logger -t backup, ошибки — в stderr, осмысленные коды возврата | 03, 07 |
Таймер systemd с Persistent=true | 08 |
| Без замечаний ShellCheck | 01 |
-n — он только печатает, что сделал бы.DEST на tmpfs размером 1 МБ), двойной запуск.systemctl start backup.service и journalctl.Подробные требования, что сдаётся и критерии оценивания — в задании на портале.
Вы умеете писать скрипты, которые работают без присмотра: принимают опции, проверяют входные данные, останавливаются при ошибке, убирают за собой, ведут журнал и запускаются по расписанию. Этого достаточно, чтобы автоматизировать большую часть рутины администратора. Дальше — управлять многими серверами декларативно в курсе «Основы Ansible» и запускать скрипты в конвейерах проверки и выкладки в курсе «Основы CI/CD».