journalctl выглядит как отличный инструмент для просмотра журналов, но я застрял на том, что похоже на простой вопрос: я хочу видеть все сообщения cron, содержащие фразу update-ipsets
.
Конечно я могу это сделать
journalctl -u cron.service | grep update-ipsets
но тогда вы теряете все другие преимущества вывода journalctl (цветовое кодирование, автопейджинг, просмотр в реальном времени и т. д.)
Я пробовал:
journalctl -u cron.service MESSAGE=update-ipsets
journalctl -u cron.service "MESSAGE=*update-ipsets*"
journalctl -u cron.service "MESSAGE=.*update-ipsets.*"
journalctl -u cron.service "MESSAGE=/.*update-ipsets.*/"
И вы не хотите экспериментировать, нажимая вкладка после MESSAGE=
- зависает оболочка (zsh / Debian Jessie) и Ctrl-C тоже не помогло!
Я как бы не могу поверить, что в него не встроена эта базовая функциональность, поэтому я уверен, что что-то пропустил?
Спасибо.
В настоящее время journalctl не поддерживает шаблоны или подстановочные знаки в совпадениях полей. grep
ваш лучший вариант.
У меня была такая же проблема, и я думаю, что journalctl
только ищет точное совпадение для VALUE, когда NAME=VALUE
передается как аргументы.
Мои расследования:
страница руководства
Из journalctl(1)
Шаблон не упоминается в описании матчей:
[...] A match is in the format "FIELD=VALUE", e.g.
"_SYSTEMD_UNIT=httpd.service", referring to the components
of a structured journal entry. [...]
Страница руководства ссылается на шаблон при описании -u
только вариант.
-u, --unit=UNIT|PATTERN
Show messages for the specified systemd unit UNIT
(such as a service unit), or for any of the units
matched by PATTERN.
Исходный код
Функция fnmatch
в src/journal
используется только при поиске объектов.
отладить journalctl
Включив вывод отладки, вы увидите, что шаблон расширяется только при использовании -u
.
$ SYSTEMD_LOG_LEVEL=debug journalctl -n1 -u gdm*
...
Matched gdm.service with pattern _SYSTEMD_UNIT=gdm*
Matched gdm.service with pattern UNIT=gdm*
Journal filter: ((OBJECT_SYSTEMD_UNIT=gdm.service AND _UID=0) OR (UNIT=gdm.service AND _PID=1) OR (COREDUMP_UNIT=gdm.service AND _UID=0 AND MESSAGE_ID=fc2e22bc6ee647b6b90729ab34a250b1) OR _SYSTEMD_UNIT=gdm.service)
...
Все совпадения считаются точными, в том числе UNIT
:
$ SYSTEMD_LOG_LEVEL=debug journalctl -n1 UNIT=gdm.*
...
Journal filter: UNIT=gdm*
...