Если вам нужно быстро и удобно просматривать логи службы systemd, команда journalctl -u будет незаменима. В этой инструкции вы узнаете, как читать журналы конкретного сервиса, использовать полезные фильтры для поиска нужной информации и диагностировать проблемы. Статья подойдет как администраторам, так и пользователям, которые хотят лучше понимать поведение службы через systemd-журналы.
Почему возникают проблемы с просмотром логов через journalctl -u
- Служба не запускается, и стандартный вывод
systemctl statusнедостаточно информативен. - Необходима фильтрация больших логов для поиска ошибок или важных событий.
- Отсутствует привычка работать с
journalctlи его опциями. - Неясно, как читать логи только для конкретной systemd-службы.
Пошаговое руководство по просмотру логов службы systemd
- Узнайте точное имя службы
Для просмотра логов нужно знать точное имя systemd-сервиса. Просмотрите список активных или установленных сервисов командой:systemctl list-units --type=serviceВы увидите список сервисов, например
nginx.service,apache2.serviceи другие. Запомните нужное имя для дальнейших команд. - Посмотрите все логи выбранной службы
Используйте команду:journalctl -u <ВАША_СЛУЖБА>.serviceНапример, для nginx:
journalctl -u nginx.serviceЭта команда выведет полные логи с указанием даты, времени и уровня сообщений.
- Ограничьте вывод до последних строк (аналог
tail)
Чтобы увидеть только последние записи, выполните:journalctl -u <ВАША_СЛУЖБА>.service -n 50Ключ
-n 50покажет 50 последних строк. По необходимости используйте другое число. Это удобно для быстрого поиска свежих ошибок. - Следите за новыми сообщениями в реальном времени (аналог
tail -f)
Для постоянного мониторинга используйте:journalctl -u <ВАША_СЛУЖБА>.service -fНовые сообщения будут выводиться сразу после появления. Это полезно при отладке и наблюдении за работой службы.
- Фильтр по времени
Например, посмотреть логи за сегодня:journalctl -u <ВАША_СЛУЖБА>.service --since todayИли задать конкретный промежуток времени:
journalctl -u <ВАША_СЛУЖБА>.service --since "2024-06-15 12:00" --until "2024-06-15 16:30"Так вы ограничите вывод только нужным временным интервалом.
- Поиск по ключевым словам и уровню логов
Например, чтобы найти все сообщения с «error»:journalctl -u <ВАША_СЛУЖБА>.service | grep errorДля вывода только предупреждений и ошибок используйте:
journalctl -u <ВАША_СЛУЖБА>.service -p warningДопустимые уровни:
emerg,alert,crit,err,warning,notice,info,debug. - Чтение логов с открытием сразу в конце (удобство навигации)
Добавьте ключ--pager-end:journalctl -u <ВАША_СЛУЖБА>.service --pager-endЭто сразу откроет логи в конце, что удобно для длинных журналов.
- Запуск с правами суперпользователя
Если ваш пользователь не входит в группуadmилиsystemd-journal, используйтеsudo:sudo journalctl -u <ВАША_СЛУЖБА>.serviceЭто обеспечит доступ к приватным записям журнала.
Альтернативные методы просмотра логов
- Если служба пишет логи в стандартные файлы, например
/var/log/nginx/error.log, используйте классические инструменты для просмотра, такие какtailилиless. - Для общего анализа логов без ограничения по службе применяйте
journalctlс фильтрацией по другим параметрам, например:journalctl SYSLOG_IDENTIFIER=cron
Проверка результата
После выполнения команд рекомендуем проверить следующее:
- Отсутствие новых ошибок в последних логах (
journalctl -u <ВАША_СЛУЖБА>.service -n 20). - Корректную работу службы:
systemctl status <ВАША_СЛУЖБА>.serviceВ выводе не должно быть слов «failed» или «inactive (dead)».
- Отсутствие новых ошибок при «follow»-мониторинге.
Если ошибок нет — значит, фильтры и способ просмотра настроены корректно.
Как избежать проблем с просмотром логов в будущем
- Добавьте своего пользователя в группу
admилиsystemd-journalдля удобства просмотра логов безsudo:sudo usermod -aG adm <ВАШ_ПОЛЬЗОВАТЕЛЬ> - Регулярно очищайте журналы, чтобы не переполнить диск. Например, удалите логи старше 30 дней:
sudo journalctl --vacuum-time=30d - Для серверов с долгим временем работы настройте автоматическую ротацию логов в файле
/etc/systemd/journald.conf. - Ознакомьтесь с документацией вашей службы — некоторые сервисы поддерживают собственные настройки журналирования.
FAQ
Как узнать точное имя службы <ВАША_СЛУЖБА>.service?
Выполните команду systemctl list-units --type=service и найдите нужную службу в списке.
Почему команда journalctl не показывает логи?
Возможно, у вас нет прав доступа. Попробуйте запустить с sudo или добавьте себя в группу adm.
Как вывести только сообщения уровня error?
Добавьте ключ -p err, например:
journalctl -u nginx.service -p errТеперь вы умеете быстро читать логи systemd-служб с помощью journalctl, фильтровать сообщения и оперативно находить проблемы.