Про управление службами при помощи systemd мы уже рассказывали: https://t.me/interface31/956
Но на этом его возможности не исчерпываются, systemd берет на себя автоматическое журналирование и ротацию логов. Причем в лог будет писаться любой вывод процесса, даже если вы ничего не настраивали.
Это удобно, особенно для простых скриптов, запускаемых по таймерам, в случае использования Cron вам бы пришлось самостоятельно озадачиться логированием.
Самая известная команда для просмотра логов, это:
journalctl -xe
Которая предлагается системой при неудачном запуске сервиса. Ключ -х предписывает выводить ссылки или пояснения для стандартных ошибок, а -e «перематывает» журнал к последней записи.Для просмотра текущих сообщений лога в реальном времени введите:
journalctl -f
Для вывода последних событий укажите:journalctl -n 50
Что выведет 50 последних записей, по умолчанию выводится 10.Чтобы посмотреть сообщения ядра используйте
journalctl -k
Для того, чтобы посмотреть логи определенной службы укажите ее имя после ключа -u:journalctl -u myserviceЧтобы ограничить журнал текущей загрузкой используйте:
journalctl -b 0
Предыдущие сеансы будут иметь отрицательные номера в сторону уменьшения, так предыдущая загрузка будет: journalctl -b -1
А список всех доступных загрузок можно получить:journalctl --list-boots
Для получения событий с указанием времени используйте:journalctl --since “2023-09-20” --until “2023-09-22 12:30:00”
Где --since – обзначает нижний предел фильтра, --until – верхний. Дата вводится в формате ГГГГ-ММ-ДД ЧЧ:ММ:CC, время, при необходимости, можно пропустить.Также можно отфильтровать сообщения по приоритету, всего используются следующие уровни приоритета:
▫️0 emergency (неработоспособность системы)
▫️1 alerts (предупреждения, требующие немедленного вмешательства)
▫️2 critical (критическое состояние)
▫️3 errors (ошибки)
▫️4 warning (предупреждения)
▫️5 notice (уведомления)
▫️6 info (информационные сообщения)
▫️7 debug (отладочные сообщения)
Приоритет уменьшается с увеличением номера. Так если мы хотим отфильтровать только ошибки и более значимые сообщения, то достаточно указать:
journalctl -p 3
Ключи можно сочетать, например, выведем все сообщения ядра от ошибки и серьезнее за текущий сеанс работы:journalctl -k -b 0 -p 3
По умолчанию journalctl разбивает вывод на страницы, если нужно изменить такое поведение, скажем для перенаправления вывода в файл, то укажите:journalctl --no-pager
Также используя ключ -o можно вывести сообщения в формате JSON или syslog, для этого нужно будет указать:▫️json: стандартный формат JSON с одной записью на строку.
▫️json-pretty: код JSON в формате, более удобном для чтения человеком
▫️short: вывод в формате syslog по умолчанию
▫️short-iso: формат по умолчанию, дополненный для отображения временных меток часов ISO 8601.
journalctl -b 0 -p 3 -u myservice -o json
Как видим, journalctl весьма мощная и удобная система, позволяющая не только собирать, но и удобно просматривать логи без применения дополнительных инструментов.