🥰 "systemd" Как я с ним подружился (и вам советую)

Золотые мои коллеги, признаюсь честно - раньше я его не особо недолюбливал. Казалось, что это какая-то гигантская надстройка над простыми init-скриптами или типо того. Но после нескольких моментов с ним, я понял - если освоить базу, он реально упрощает жизнь.

Сегодня - коротко и без воды о том, что реально нужно знать.

📌init (предок systemd) - это первый процесс, который запускается ядром после загрузки Linux. У него всегда PID 1. Именно init запускает всё остальное: сервисы, логин-шеллы, демоны.

📌Systemd - это не просто замена init. Это менеджер системы, который:

  • Запускает сервисы
  • Следит, чтобы они не упали
  • Управляет логами
  • Контролирует ресурсы И ещё кучу всякого и полезного

Вся magic - в юнитах. Юнит - это конфиг, который описывает, что и как запускать.

Основные типы юнитов: Тип Расширение Что делает Сервис .service Запускает демона (nginx, mysql, sshd) Таймер .timer Запускает что-то по расписанию (замена cron) Сокет .socket Запускает сервис, когда приходит подключение Маунт .mount Монтирует файловые системы Таргет .target Группирует несколько юнитов (например, multi-user.target)

✔️ Основные команды, которые нужно знать: Управление сервисами:

#Запустить

sudo systemctl start nginx

#Остановить

sudo systemctl stop nginx

#Перезапустить

sudo systemctl restart nginx

#Перечитать конфиг без остановки

sudo systemctl reload nginx

#Посмотреть статус (главная команда!)

sudo systemctl status nginx

#Включить автозапуск при загрузке

sudo systemctl enable nginx

#Отключить

sudo systemctl disable nginx

#Проверить, включен ли

systemctl is-enabled nginx

#Все активные юниты

systemctl list-units

#Все сервисы (включая неактивные)

systemctl list-units --type=service --all

✔️ Логи через journald Вместо того чтобы копаться в /var/log, можно пользоваться встроенной системой логирования systemd.

#Логи конкретного сервиса

sudo journalctl -u ngin

#Логи за последний час

sudo journalctl --since "1 hour ago"

#Только ошибки за последнюю загрузку

sudo journalctl -p err -b

#Следить за логами в реальном времени

sudo journalctl -u nginx -f Плюсы:

  • Всё в одном месте
  • Можно фильтровать по времени, уровню, юниту
  • Логи не теряются при ротации

✔️ Управление ресурсами через systemd Systemd умеет ограничивать ресурсы для сервисов через cgroups. Без танцев с бубном (всё как мы любим)

#Ограничить память для nginx

sudo systemctl set-property nginx.service MemoryMax=512M MemoryHigh=384M

#Ограничить CPU

sudo systemctl set-property nginx.service CPUQuota=50%

#Посмотреть текущие лимиты

systemctl show nginx | grep -E "Memory|CPU" Это работает через cgroups v2. Идеально для серверов, где на одном хосте крутится несколько сервисов.

И да, я очень полюбил флаги :)