Где / почему нет журналов для системных служб обычных пользователей?

26

Я пытаюсь изучить основы использования systemd и столкнулся с запутанной проблемой с пользовательскими сервисными блоками.

При запуске обычных служб с помощью systemctl запустите some.service. Я могу найти полный журнал для этого сервиса (включая то, что он напечатал в stdout / stderr, насколько я понимаю), запустив sudo journalctl --unit some.service .

Рассмотрим пример сервисного файла chatty.service :

[Service]
ExecStart=/usr/bin/echo "test from chatty.service"

Когда я помещаю этот служебный файл в ~ / .config / systemd / user / chatty.service и запускаю его с помощью systemctl --user start chatty.service, я не могу найти его вывод, отправленный на стандартный вывод в journalctl, ни с обычным journalctl, ни с journalctl - -user . Я получаю только следующий вывод в обоих:

Jan 15 19:16:52 qbd-x230-suse.site systemd[1168]: Starting chatty.service...
Jan 15 19:16:52 qbd-x230-suse.site systemd[1168]: Started chatty.service.

И journalctl --unit chatty.service вообще ничего не возвращает (с или без --user не имеет значения).

Хотя, если я переместу тот же файл службы в / etc / systemd / system и запусту его с помощью sudo systemd start chatty.service, я получу следующий вывод при запуске sudo journalctl --unit chatty.service :

Jan 15 19:28:08 qbd-x230-suse.site systemd[1]: Starting chatty.service...
Jan 15 19:28:08 qbd-x230-suse.site systemd[1]: Started chatty.service.
Jan 15 19:28:08 qbd-x230-suse.site echo[27098]: test from chatty.service

Кажется, что пользовательский сервисный модуль не так хорошо интегрирован, это ожидаемо, я что-то упустил или это ошибка?

Я использую openSUSE 13.1 x86-64, с systemd 208 (установка по умолчанию).

Quantumboredom
источник
Тот же systemd 208 здесь, на Arch Linux. Вы можете использовать, journalctl --user --user-unit chattyчтобы получать эти сообщения запуска / остановки от systemd, но не то, что выводит эхо-процесс, по крайней мере, в моем случае. Вы можете получить отраженное сообщение journalctl --userили использовать другой фильтр.
lilydjwg

Ответы:

20

Используйте --user-unitопцию, и в вашем случае ...

journalctl --user-unit chatty
elynnaie
источник
Получаете ли вы сообщение stdout "test from chatty.service" в выводе журнала, или просто "Starting chatty.service ..." и "Started chatty.service". Сообщения?
Quantumboredom
Да, я также смог получить выходные данные процесса (например, сообщение «test from chatty.service»).
elynnaie
Это то, чего я ожидал, но я не вижу этого здесь. Могу я спросить, на какой операционной системе (с версией) вы работаете?
Quantumboredom
Arch Linux 3.13.7-1. версия systemd 212.
elynnaie
2
Теперь я вижу вывод в главном журнале. Но когда я пытаюсь бежать, journalctl --userя получаю, No journal files were found.И journalctl --user-unit chattyэто не работает для меня.
CMCDragonkai
6

Некропостинг, но я столкнулся и решил ту же проблему сегодня. Скорее всего, journalctl --user-unit chattyу вас не получилось, потому что вы запускаете его из-под root. Тем не менее, per man journalctl, --user-unitфильтрует записи журнала не только по _SYSTEMD_USER_UNIT=, но и по _UID=, и нет chattyслужбы с uid root, поэтому записи не найдены.

Вполне вероятно, что вы тоже пытались запустить journalctl --user-unit chattyот своего обычного пользователя, но получили No journal files were found. Это происходит потому, что (и всем пользователям предоставлен доступ к их личным журналам для каждого пользователя, из-за чего это man journalctlможет сбивать с толку) в 2018 году мой журнал Debian 9 по-прежнему не является постоянным по умолчанию ( Storage=autoв /etc/systemd/journald.confи /var/log/journal/не существует), а в Постоянный режим journaldне поддерживает разделение журналов, поэтому все журналы заканчиваются в одном месте, /run/log/journalнесмотря на то, что разделение включено по умолчанию - см. SplitModeв man journald.conf. Включение постоянства исправляет это.

TL; DR: включить постоянство, поставив Storage=persistentк /etc/systemd/journald.confи перегрузочные journald с sudo systemctl restart systemd-journald.

Кроме того, поиск с sudo journalctl _SYSTEMD_USER_UNIT=chatty.service

Некоторые подробности можно найти по адресу https://lists.freedesktop.org/archives/systemd-devel/2016-October/037554.html.

АРС
источник
2
Спасибо. Я получал No journal files were opened due to insufficient permissions.запутывающую «подсказку» о настройке разрешений, но мне не нужно было устанавливать разрешения, потому что я пытаюсь получить доступ к пользовательским журналам, а не системным журналам. Ваше исправление сработало. Большое спасибо.
Рольф
3

До появления systemd v230 вам приходилось использовать менее интуитивно понятный --user-unitфлаг для просмотра журналов вашего пользовательского устройства:

journalctl --user-unit chatty

Начиная с systemd v230, теперь вы можете комбинировать --userи --unitфлаги так, как вы ожидаете:

journalctl --user --unit chatty

--user --unitСинтаксис поддерживается начиная с Ubuntu 17.10.

Марк Стосберг
источник
2
Я не уверен, что функция "--user --unit" работает на v230 ... здесь работает v232, и эта функция не работает
LeGEC