Systemctl: управление сервисами в Linux

Если ты хоть раз поднимал сервер на Linux, то наверняка сталкивался с systemctl. Это не просто какая-то очередная тулза для запуска демонов — это твой швейцарский нож для управления сервисами в современных дистрибутивах. Без него никуда: хочешь поднять nginx, рестартануть PostgreSQL, посмотреть статус sshd — всё через systemctl. В этом посте разложу по полочкам, как это работает, зачем оно нужно, и как не наступить на грабли.

Зачем вообще нужен systemctl?

Раньше в Linux были всякие service, init.d и прочий олдскул, где всё было через костыли и shell-скрипты. С приходом systemd, который почти везде дефолтный, жизнь стала проще и одновременно сложнее. systemctl — это основной инструмент для общения с systemd. Он позволяет:

  • Запускать, останавливать, перезапускать сервисы
  • Включать/выключать автозапуск
  • Смотреть логи и статусы
  • Работать с юнитами (не только сервисы, но и таймеры, сокеты, маунты и пр.)

Что требуется

  • ОС: Любой современный Linux-дистрибутив: Ubuntu (16.04+), Debian (8+), CentOS/RHEL (7+), Fedora, Arch — почти всё, что не совсем древнее.
  • Железо: Подойдёт любой сервер или даже виртуалка. Systemd работает и на Raspberry Pi, и на мощных серверах.
  • Права: Для управления системными сервисами — root или sudo.

Установка (пошаговая инструкция)

В большинстве случаев systemd и systemctl уже стоят «из коробки». Но если вдруг у тебя минимальная сборка, вот как проверить и поставить:

  1. Проверь, установлен ли systemctl:
    which systemctl

    Если путь есть — всё ок. Если пусто, значит надо ставить.

  2. Установка на Debian/Ubuntu:
    sudo apt update
    sudo apt install systemd
  3. Установка на CentOS/RHEL:
    sudo yum install systemd
  4. Установка на Arch Linux:
    sudo pacman -Syu systemd
  5. Проверь версию:
    systemctl --version
  6. Если после установки не работает — возможно, ты не в systemd-based системе (например, старый OpenVZ или WSL1). Тут проще пересесть на что-то свежее.

Использование: команды и варианты

Вот самые ходовые команды, которые реально нужны каждый день:

  • Старт сервиса:
    sudo systemctl start nginx
  • Остановить сервис:
    sudo systemctl stop nginx
  • Перезапустить сервис:
    sudo systemctl restart nginx
  • Плавный перезапуск (reload):
    sudo systemctl reload nginx

    (Если поддерживается самим сервисом)

  • Включить автозапуск:
    sudo systemctl enable nginx
  • Отключить автозапуск:
    sudo systemctl disable nginx
  • Проверить статус:
    systemctl status nginx
  • Посмотреть все активные сервисы:
    systemctl list-units --type=service
  • Посмотреть все юниты (сервисы, таймеры и пр.):
    systemctl list-units
  • Показать автозапускаемые юниты:
    systemctl list-unit-files --state=enabled
  • Перезагрузить машину:
    sudo systemctl reboot
  • Выключить машину:
    sudo systemctl poweroff
  • Смотреть логи сервиса (через journal):
    journalctl -u nginx

Полный список команд — man systemctl.

Ошибки и как делать не надо

  • Не лезь руками в /etc/init.d — это прошлый век.
  • Не редактируй напрямую юнит-файлы в /lib/systemd/system/ — используй systemctl edit или копируй в /etc/systemd/system/.
  • Если меняешь юнит-файлы, не забывай делать:
    sudo systemctl daemon-reload

    Иначе systemd не увидит твои изменения.

  • Не путай enable/disable с start/stop. Enable — это про автозапуск, start — про текущее состояние.
  • Не игнорируй статусы и логи. Если сервис не стартует, systemctl status и journalctl -xe расскажут почему.

Реальный пример из практики

Допустим, ты деплоишь свой pet-проект на VPS. У тебя есть myapp.service:

[Unit]
Description=My Awesome App

[Service]
ExecStart=/opt/myapp/bin/start.sh
Restart=always
User=appuser

[Install]
WantedBy=multi-user.target

Копируешь этот файл в /etc/systemd/system/myapp.service:

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

Делаешь:

sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
sudo systemctl status myapp

Теперь твой сервис стартует автоматически после ребута, все логи можно смотреть через journalctl -u myapp. Если что-то пошло не так — status и journalctl помогут найти ошибку.

Заключение

systemctl — это must-have для любого, кто работает с Linux. Управлять сервисами стало реально удобно, всё логично и предсказуемо (ну, почти всегда). Если хочешь глубже — читай Arch Wiki и официальную документацию. А если что-то не взлетает — гугли ошибку, скорее всего, кто-то уже наступал на этот грабель.

Пользуйся systemctl с умом, не забывай про daemon-reload после изменений, и пусть твои сервисы всегда работают!

Хотите прочитать больше про Администрирование?
Отзывов нет.

Ваш отзыв

Пожалуйста, заполните поля снизу и добавьте отзыв!.
Имя *
E-mail *
Сайт
Сообщение *