🥰 "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. Без танцев с бубном (всё как мы любим)
#Ограничить память для nginxsudo systemctl set-property nginx.service MemoryMax=512M MemoryHigh=384M
#Ограничить CPUsudo systemctl set-property nginx.service CPUQuota=50%
#Посмотреть текущие лимитыsystemctl show nginx | grep -E "Memory|CPU" Это работает через cgroups v2. Идеально для серверов, где на одном хосте крутится несколько сервисов.
И да, я очень полюбил флаги :)