Назад | Перейти на главную страницу

Как отфильтровать вывод journalctl по имени процесса?

Когда процесс регистрируется в systemd, его имя процесса записывается и отображается как идентификатор в выходных данных journalctl.

$ systemd-cat echo "test"
$ journalctl -f
-- Logs begin at Sat 2018-02-24 12:13:24 CET. --
...
Jul 25 13:52:26 mycomputer echo[25098]: test

Однако фильтрация по этому имени, похоже, не работает.

$ journalctl -f -t echo
-- Logs begin at Sat 2018-02-24 12:13:24 CET. --
$ journalctl -f -u echo
-- Logs begin at Sat 2018-02-24 12:13:24 CET. --

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

$ systemd-cat -t myapp echo "test"
$ journalctl -f
-- Logs begin at Sat 2018-02-24 12:13:24 CET. --
Jul 25 13:56:08 mycomputer myapp[25213]: test
$ journalctl -f -t myapp
-- Logs begin at Sat 2018-02-24 12:13:24 CET. --
Jul 25 13:56:08 mycomputer myapp[25213]: test

Как я могу отфильтровать вывод journalctl по имени процесса?

Только что понял это. Вы можете использовать любой поле журнала systemd как фильтр, указав <FIELD_NAME>=<VALUE>.

Для этого вопроса полезны следующие поля:

_COMM=, _EXE=, _CMDLINE=

Имя, путь к исполняемому файлу и командная строка процесса, из которого возникла запись журнала.

Итак, чтобы отфильтровать имя команды, используйте journalctl -f _COMM=<command-name>

$ journalctl -f _COMM=echo
-- Logs begin at Sat 2018-02-24 12:13:24 CET. --
Jul 25 13:52:26 mycomputer echo[25098]: test
Jul 25 13:56:08 mycomputer myapp[25213]: test