Все главы учебника
Содержание учебника
Глава 14 / Linux

Финальный проект: запустить, объяснить отказ и восстановить

10 мин чтенияКонтент v0.10.0

Коллеге нужен небольшой локальный сайт с отчётом по запросам. Он должен открываться в Ubuntu, а инструкция — позволять повторить запуск после нового входа. Одного ответа 200 недостаточно: требуется понять права, заметить ошибку входных данных, остановить свой процесс и восстановить файлы из копии.

Финал объединяет предыдущие главы. Он не требует платного сервиса, публичного домена, Docker или покупки сертификата. Вы используете учебную Ubuntu, Bash, Python3, curl и tar. Полная практика может занять один–два часа, а чтение условий — отдельно около десяти минут. Не копируйте длинный набор команд без проверки промежуточных состояний.

Результат, который можно принять

Создайте новое рабочее дерево с каталогами site, data, reports и backup. В data хранится маленький текстовый журнал согласованного формата. В site — страница index.html без секретов. Скрипт из десятой главы принимает путь к журналу и печатает точный счёт. HTTP-сервер слушает только 127.0.0.1 выбранного порта.

Приёмка требует три наблюдения: сайт отвечает ожидаемым текстом; отчёт совпадает с известными данными; архив восстанавливается в новое место с проверкой байтов. Ещё одна часть — инструкция для человека, который не был рядом с вами. Она должна указывать окружение, команды, остановку и ограничения, а не только хранить скриншот работающей страницы.

Подготовка без скрытых зависимостей

Начните с новой временной папки:

final_lab_dir=$(mktemp -d)
mkdir -p "$final_lab_dir/site" "$final_lab_dir/data" "$final_lab_dir/reports" "$final_lab_dir/backup"
printf 'final linux project\n' > "$final_lab_dir/site/index.html"
printf '200 /home\n500 /pay\n200 /home\n404 /old\n500 /pay\n' > "$final_lab_dir/data/requests.log"

Проверьте uname, выпуск Ubuntu, пользователя и найденные инструменты. Не нужно повторно устанавливать существующие пакеты. Скопируйте свой проверенный report.sh в эту папку либо создайте его из текста главы. Укажите Bash как интерпретатор и проверьте синтаксис. Рабочий путь сохраните в своей заметке: новая оболочка не знает переменную автоматически.

Содержимое ожидаемого отчёта — requests=5 failures=2. Исходный журнал должен остаться неизменным. Перед перенаправлением в reports убедитесь, что выбран новый результат, а не файл входа. Проверяйте статус до выполнения следующей команды, которая его заменит.

Запуск и наблюдение

В первом терминале запускайте локальный сервер с точным site-каталогом; во втором проверяйте curl с таймаутом и без proxy для loopback. Найдите слушающий сокет в Ubuntu и свой PID. Если пользовательский systemd доступен, можно использовать учебный unit с подходящими путями. Это необязательное усложнение, а не автоматическая замена уже проверенного ручного запуска.

Сохраните stdout/stderr сервера в своём журнале либо укажите точную команду journalctl для своего unit. Не сервируйте родительский каталог data/backup. Bind0.0.0.0 не требуется и меняет область доступности. Порт в инструкции должен совпадать с портом проверки; при конфликте заранее выберите другой.

Три управляемых отказа

Первый отказ — несуществующий HTTP-путь. Ожидайте 404 и действующее соединение. Второй — остановленный сервер: HTTP-ответа нет, curl завершает запрос ошибкой. Не называйте эти причины одинаковыми. После восстановления сервера снова проверьте сайт, а не только наличие процесса.

Третий отказ — неверная строка журнала. Сделайте её в отдельной копии входа, запустите отчёт и проверьте ненулевой статус. Неправильный отчёт не должен стать успешным только потому, что output-файл появился. Правильный исходный журнал не меняйте. По желанию проверьте снятое право чтения у отдельного учебного файла обычным пользователем; опыт root не является проверкой этой границы.

Для каждого отказа запишите симптом, наблюдение, гипотезу и изменение. Например: «curl не соединился, ss не показал наш порт, процесс остановлен; запуск того же сервера вернул 200». Это доказательство конкретной причины в контролируемом опыте, а не универсальная инструкция лечить любую сеть перезапуском.

Копия и возвращение данных

Создайте архив site и data вне архивируемого дерева. Перечислите содержимое, затем извлеките в новую пустую папку. Проверьте index и журнал через cmp; снова выполните отчёт по восстановленному входу. Если архив расположен на том же диске, назовите его локальной копией для ошибки редактирования, не полной защитой от потери VM.

Не требуется удалить оригинал, чтобы проверить восстановление. Доказательство строится на независимом извлечении, сравнении и повторной полезной работе. Подтверждение «tar завершился 0» без извлечения не проходит приёмку. Сохраните перечень файлов и условия, при которых копия может устареть.

Самостоятельная лаборатория: инструкция и критерии готовности

Напишите README с окружением, зависимостями, выбранным каталогом, запуском, проверкой, остановкой, отчётом и восстановлением. Включите пример ожидаемого вывода и то, что может измениться: PID, временный путь, версии, время в журнале. Настоящие пароли, токены и полный вывод env туда не попадают.

Затем откройте новый сеанс и пройдите собственную инструкцию. Не используйте забытые значения переменных из старого окна. Проверьте, что сайт, отчёт и восстановление повторяются. После завершения остановите именно свой сервер; для systemd stop вашего unit, для дочернего процесса — корректный сигнал и wait. Не включайте постоянный автозапуск ради оценки.

Разбор и перенос

Если три результата совпали и управляемые отказы объяснены, вы умеете пользоваться Linux как рабочим окружением, а не только узнавать команды. Если сайт работает, но отчёт неверен, это самостоятельная ошибка данных; если восстановление отличается, исправьте копию до заявления о backup.

Следующий проект может требовать HTTPS, нескольких пользователей или базы данных. Тогда добавятся новые границы, которых этот курс не доказал. Сохраните привычку: точный сценарий, наблюдение, ограниченное действие и повторная проверка. Бесплатный финал завершён вашим воспроизводимым пакетом, а не внешним платным экзаменом.

Первичные источники для проверки решений: Bash scripts, Python http.server, GNU tar.