March 1

Шпаргалка по Systemd и Journalctl

Это перевод оригинальной статьи Systemd & Journalctl Cheat Sheet.

Подписывайтесь на телеграм-канал usr_bin, где я публикую много полезного по Linux, в том числе ссылки на статьи в этом блоге.

Практическое, удобное для копирования и вставки руководство по освоению systemd и journalctl для специалистов DevOps, системных администраторов и разработчиков.

Оглавление

Часть 1 — Управление сервисами (повседневная деятельность)

  • Управление состоянием сервиса ( start, stop, restart, reload)
  • Загрузка и состояние системы ( enable, disable)
  • Проверка состояния и устранение неполадок ( status, is-active)
  • Список служб

Часть 2 — Освоение логов с помощью Journalctl

  • Мониторинг в реальном времени (-f)
  • Фильтрация по времени и услугам (-u, --since)
  • Журналы ядра и загрузки (-k, -b)
  • Ведение журнала (--vacuum)

Часть 3 — Расширенные навыки работы с Systemd (для опытных пользователей)

  • Анализ производительности загрузки ( blame, critical-chain)
  • Создание пользовательской службы (шаблона)
  • Таймеры Systemd против Cron

Часть 1 — Управление услугами (повседневная деятельность)

Большинство дистрибутивов Linux (Ubuntu, Debian, CentOS, RHEL) теперь работают на Systemd. Вот основные команды, которые используются в 90% случаев.

1. Базовое управление сервисом

Замените postgresqlна название вашей службы (например, nginx, docker, ssh).

# Немедленный запуск службы
sudo systemctl start postgresql

# Немедленная остановка службы
sudo systemctl stop postgresql

# Перезапуск службы (остановка + запуск)
sudo systemctl restart postgresql

# Перезагрузка конфигурации без разрыва соединений (если поддерживается службой)
sudo systemctl reload postgresql

2. Загрузка и состояние системы

Управление автозапуском.

# Включить запуск службы при загрузке системы
sudo systemctl enable postgresql

# Отключить запуск службы при загрузке системы
sudo systemctl disable postgresql

# Проверить, включена ли служба
systemctl is-enabled postgresql

3. Проверка состояния (первый шаг отладки)

Команда statusвыводит идентификатор процесса, объем используемой памяти и последние несколько строк лога.

# Проверка статуса
systemctl status postgresql

# Проверка только активности (возвращает "active" или "inactive")
systemctl is -active postgresql

# Проверка наличия сбоя службы 
systemctl is -failed postgresql

4. Проверка статусов служб

Узнайте, какие программы запущены в системе.

# Вывод списка всех запущенных служб
systemctl list -units --type =service --state=running

# Вывод списка всех служб (включая неактивные)
systemctl list -units --type =service --all

# Поиск конкретной службы (например, связанной с брандмауэром)
systemctl list -units --type =service | grep fire

Часть 2 — Освоение логирования с помощью Journalctl

Прекратите использовать tail -f /var/log/syslog`.` journalctl— это современный, структурированный способ обработки логов.

1. Просмотр и отслеживание логов

# Отслеживание логов в  реальном времени ( как tail -f )
journalctl -f

# Отслеживание логов только для КОНКРЕТНОЙ службы ( стандартная команда)
journalctl -u postgresql -f

# Просмотр логов в обратном порядке ( сначала самые новые )
journalctl -r

2. Фильтрация по времени

Отлично подходит для постмортемов.

# Отображение логов с момента последней перезагрузки
journalctl -b

# Отображение логов за последний час
journalctl --since " 1  час назад"

# Отображение логов за определенный период времени
journalctl --since "2025-12-20 14:00:00" --until "2025-12-20 15:00:00" 

3. Логи ядра и ошибок

# Отображать только сообщения ядра (эквивалент dmesg)
journalctl -k

# Отображать только сообщения с критичностями Error, Critical и Alert
journalctl -p err

4. Ведение логов

Если ваш диск заполняется, безопасно очистите журналы событий.

# Проверка объема дискового пространства, занимаемого логами
journalctl --disk-usage

# Сохранять только последние 1  ГБ логов
journalctl --vacuum-size=1G

# Сохранять только последние 2 дня логов
journalctl --vacuum - time=2d 

Часть 3 — Расширенные навыки работы с Systemd (для опытных пользователей)

Превратите свои навыки из "оператора" в "инженера".

1. Анализ производительности загрузки

Ваш сервер загружается медленно? Найдите причину.

# Список всех служб , отсортированных по времени инициализации
systemd - analyze blame

# Визуализация в виде дерева
systemd - analyze critical - chain
systemd-analyze plot > boot.sv

2. Создание пользовательской службы

Хотите запустить скрипт на Python или исполняемый файл Go в качестве службы? Создайте файл по адресу /etc/systemd/system/myapp.service:

[Unit]
Description=My Custom Application After =network.target

[Service]
# Пользователь, запускающий скрипт
User=ubuntu
# Рабочий каталог
WorkingDirectory=/home/ubuntu/app
# Команда запуска
ExecStart=/usr/bin/python3 /home/ubuntu/app/main.py
# Автоматический перезапуск при сбое
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

После создания файла запустите команду, sudo systemctl daemon-reloadа затем sudo systemctl start myapp.

3. Таймеры Systemd (современный Cron)

Таймеры Systemd часто предпочтительнее cron, поскольку они могут зависеть от других служб и обеспечивают более качественное логирование.

# Вывести список всех активных таймеров
systemctl list-timers

Золотое правило (совет для начинающих)

Прекратите щуриться, разглядывая усеченные лог. Если systemctl statusотображает сообщение об ошибке, но важные строки с ошибками обрезаются (потому что они слишком длинные), не стоит гадать .Запустите journalctl -u [service_name] -e .Фильтры -u отображает только нужную службу и сразу переходят к концу (самым последним записям). Это самый быстрый способ выяснить причину, не пролистывая тысячи строк.

На этом все! Спасибо за внимание! Если статья была интересна, подпишитесь на телеграм-канал usr_bin, где будет еще больше полезной информации.