Фоновые процессы и автозапуск: systemd unit и journalctl
Содержание курса
Когда мы запускали веб-приложение в терминале, оно занимало сеанс целиком: пока сервер работает, в этой же консоли нельзя выполнять другие команды, а закрытие окна или обрыв SSH-сессии сразу гасит процесс. Чтобы программа работала непрерывно в фоне и сама поднималась при перезагрузке системы, управление ей передают системному менеджеру.
1. Устройство service-файла в systemd
В Ubuntu главным процессом инициализации операционной системы выступает systemd. Он запускается ядром первым (получает идентификатор PID 1) и управляет фоновыми программами. Каждая служба описывается текстовым конфигурационным файлом — юнитом (unit file). Пользовательские службы операционной системы хранятся в каталоге /etc/systemd/system/ и имеют суффикс .service.
Файл конфигурации состоит из трёх ключевых секций:
[Unit]— содержит общие метаданные и зависимости. ДирективаDescriptionзадаёт человекочитаемое описание сервиса, которое будет видно в статусе и системных отчётах.[Service]— определяет параметры запуска процесса. ПараметрUserуказывает, от чьего имени запускать приложение. Запуск от непривилегированного пользователя, а не от root, ограничивает возможный ущерб при уязвимости в коде.WorkingDirectoryзадаёт текущую папку для процесса при старте. ПараметрExecStartзадаёт команду, которую менеджер выполнит для старта приложения. ДирективаRestart=on-failureуказываетsystemdавтоматически перезапускать упавшую программу, если она завершилась с ненулевым кодом возврата или была аварийно остановлена сигналом.[Install]— содержит инструкции по включению службы в автозагрузку. СтрокаWantedBy=multi-user.targetпривязывает сервис к стандартному многопользовательскому режиму, в котором операционная система загружается при обычном старте без графической оболочки.
В строке ExecStart особенно важно указать полный абсолютный путь к интерпретатору виртуального окружения проекта: /home/student/devops-demo/.venv/bin/python. Если написать просто python, systemd обратится к системному интерпретатору по стандартным системным путям, где нет библиотек, установленных в изолированное окружение приложения.
