LinuxНизкая

Управление сервисами в Ubuntu: настройка systemctl за 10 минут

Разбираем базовые и продвинутые команды systemctl для контроля фоновых процессов в Ubuntu. Вы научитесь управлять автозапуском, проверять статусы и создавать собственные юниты.

Обновлено 6 апреля 2026 г.
10-15 мин
Низкая
FixPedia Team
Применимо к:Ubuntu 20.04 LTSUbuntu 22.04 LTSUbuntu 24.04 LTS

Зачем управлять службами вручную

В современных версиях Ubuntu за все фоновые процессы отвечает systemd. Умение управлять службами напрямую влияет на безопасность сервера, потребление ресурсов и скорость загрузки системы. После выполнения этого руководства вы сможете останавливать зависшие демоны, оптимизировать список автозагрузки и разворачивать собственные приложения как системные сервисы без сторонних скриптов инициализации.

Подготовка и требования

Перед началом убедитесь, что у вас есть доступ к терминалу с правами обычного пользователя. Большинство операций с systemd требуют привилегий суперпользователя, поэтому команды будут выполняться с префиксом sudo. Гайд полностью совместим с Ubuntu 20.04, 22.04 и 24.04, где systemctl является стандартным менеджером инициализации. Откройте терминал (Ctrl+Alt+T) или подключитесь по SSH.

Шаг 1: Мониторинг и диагностика процессов

Прежде чем вмешиваться в работу системы, оцените текущее состояние. Вывести подробную информацию о конкретной службе (например, ssh) поможет команда:

sudo systemctl status ssh

В ответе вы увидите поле Active: active (running) или failed. Для поиска проблем используйте журналы конкретной службы:

journalctl -u ssh --since "1 hour ago"

Чтобы получить полный список загруженных юнитов и отфильтровать только работающие:

systemctl list-units --type=service --state=running

Шаг 2: Базовое управление состоянием

Если служба зависла или требует сброса конфигурации, примените одну из стандартных команд:

  • sudo systemctl start nginx — мгновенный запуск процесса.
  • sudo systemctl stop nginx — корректная остановка (отправляет сигнал SIGTERM).
  • sudo systemctl restart nginx — последовательная остановка и запуск (полезно после правки конфигов).
  • sudo systemctl reload nginx — перечитывает конфигурацию без обрыва текущих подключений.

💡 Совет: Всегда используйте reload вместо restart для веб-серверов и баз данных, если изменения в конфигах позволяют это. Это сохранит активные сессии пользователей и снизит простой.

Шаг 3: Настройка автозагрузки

По умолчанию многие службы включены при установке, но вы можете управлять их поведением при старте системы.

  • Включить автозапуск: sudo systemctl enable nginx
  • Отключить автозапуск: sudo systemctl disable nginx
  • Полностью заблокировать запуск вручную и автоматически: sudo systemctl mask nginx

Проверить статус автозагрузки можно через systemctl is-enabled nginx. Если команда вернула enabled, юнит будет стартовать вместе с ОС. Для временного отключения службы только на текущую сессию используйте sudo systemctl mask --runtime nginx.

Шаг 4: Создание собственного сервиса

Чтобы ваше приложение запускалось в фоне и восстанавливалось после краха, создайте юнит-файл. Откройте редактор:

sudo nano /etc/systemd/system/myapp.service

Вставьте базовую структуру:

[Unit]
Description=Мое кастомное приложение
After=network.target

[Service]
User=myuser
Group=mygroup
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/python3 /opt/myapp/main.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Здесь Restart=always гарантирует, что systemd автоматически перезапустит процесс при падении. After=network.target указывает, что сервис должен стартовать только после инициализации сетевого стека. После сохранения примените изменения:

sudo systemctl daemon-reload

Затем активируйте и запустите его одной командой:

sudo systemctl enable --now myapp

Проверка результата

Убедитесь, что сервис работает штатно. Выполните:

systemctl list-units --type=service | grep myapp

Статус должен быть active. Дополнительно проверьте логи на наличие ошибок запуска:

sudo journalctl -u myapp -e

Если в логах нет строк с ERROR или FATAL, а процесс занимает ресурсы только при реальной нагрузке, настройка завершена успешно.

Возможные проблемы

Ошибка Failed to execute operation: No such file or directory Обычно возникает при попытке включить несуществующий юнит. Проверьте опечатки в названии и убедитесь, что файл лежит именно в /etc/systemd/system/. После добавления или удаления файлов всегда запускайте sudo systemctl daemon-reload.

Служба не останавливается (Job for ... canceled) Процесс мог игнорировать сигнал завершения. Принудительно завершите его командой sudo systemctl kill --signal=SIGKILL имя_службы, а затем выполните stop. Проверьте код возврата приложения или обновите его, так как корректные демоны должны обрабатывать SIGTERM.

Ошибка доступа к файлам в WorkingDirectory Если в логах видны Permission denied, убедитесь, что пользователь, указанный в User= в секции [Service], имеет права на чтение и выполнение файлов в рабочей директории. Исправить можно через sudo chown -R myuser:mygroup /opt/myapp и sudo chmod -R 750 /opt/myapp.

Часто задаваемые вопросы

Почему systemctl не видит мою службу?
В чём разница между stop, disable и mask?
Как безопасно проверить изменения в юните?

Полезное

Просмотр статуса и списка служб
Запуск, остановка и перезапуск
Настройка автозагрузки
Создание собственного юнита

Эта статья помогла вам решить проблему?