Шпаргалка по 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
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, где будет еще больше полезной информации.