Как исправить атрибут устройства последних строк журнала systemd перед выходом?

У меня есть служба systemd, которая регистрируется в stdout. Оттуда systemd захватывает STDOUT и записывает его в журнал.

Я использую общую идиому для обработки ошибки, когда я echo диагностика, а затем выхожу с ненулевым кодом ошибки:

 echo "my final error"; exit 1; 

Моя проблема в том, что эта финальная echo строка делает это в журнале, но не связана с моей «единицей». Посмотрев на journalctl -o json-pretty , я вижу, в чем разница. В окончательном каротаже отсутствуют свойства _SYSTEMD_CGROUP и _SYSTEMD_UNIT.

То, что я думаю, происходит, это своего рода состояние гонки. Я подозреваю, что сценарий bash не ждет, пока journald полностью обработает, прежде чем переходить к линии выхода. Таким образом, exit строка будет достигнута до завершения journald записи журнала. journald пытается найти unit , отправившее журнал, но теперь его не найти, так как устройство больше не работает.

Если я прав, я, вероятно, мог бы решить проблему, поставив sleep 1 перед оператором exit 1 , но есть ли лучший способ получить атрибут final logs?

Я использую версию systemd 229 на Ubuntu 16.04.

2 Solutions collect form web for “Как исправить атрибут устройства последних строк журнала systemd перед выходом?”

@ mark-stosberg, это известная проблема: journald не может атрибутировать сообщения, поступающие от процессов, которые выходили из своей группы, из-за / proc vs SCM_CREDS race

Вы можете найти обходной путь: https://github.com/systemd/systemd/issues/2913#issuecomment-219702148

попробуйте SyslogIdentifier=

Устанавливает имя процесса для префиксных строк журнала, отправленных в систему ведения журнала или в буфер журнала ядра.

и запустите journalctl _SYSTEMD_UNIT=unit + UNIT=unit + SYSLOG_IDENTIFIER=id

Я исследовал это, и, похоже, известная проблема с systemd в том, что есть запрос на перенос .

Исправление включает в себя кэширование метаданных для службы, поэтому, даже если служба завершена, метаданные для нее по-прежнему доступны для надлежащей классификации последних нескольких журналов.

Это также считается открытой ошибкой в ​​CoreOS , которая использует systemd.

Ошибка также отслеживается на трекеере systemd freedesktop.org с ошибкой:

  • Ошибка 50184 – системный журнал иногда теряет _CMDLINE, _COMM, _EXE, _SYSTEMD_CGROUP, _SYSTEMD_UNIT

Дальнейшее тестирование показало, что проблема с отсутствием атрибута журнала является более серьезной с пользовательскими единицами. Я предполагаю, что это отдельная проблема. Для системных блоков состояние гонки относительно невелико и добавление sleep 1; перед тем, как выйти из сценария службы, можно добавить достаточное заполнение до того, как будет напечатан последний журнал, и выйти, чтобы обход проблемы.

  • Как получить сообщение об ошибке в journald
  • В journald, почему некоторые записи журнала sshd не относятся к ssh.service
  • Journald для вопросов подкачки rsyslog
  • Записывайте все передачи scp с помощью systemd-journald
  • Перезагрузка systemd-journald config
  • Как настроить политику хранения журналов на единицу с помощью журнала?
  • Где «logger» регистрирует свои сообщения в Arch Linux?
  • скрипт не может записывать в журнал systemd
  • Как получить журнал загрузки ядра с помощью журналаctctl?
  • Как изменить место сохранения системного журнала?
  • Журнал показывает очень старые ботинки, которые не перерабатываются
  • Interesting Posts

    Как узнать путь по умолчанию для каталога журналов?

    Поиск способа резервного копирования / зеркалирования диска путем замены

    Функция daemon в /init.d не запускает программу в фоновом режиме в fedora13

    Не удается выполнить команду с корнем на удаленном хосте Linux

    Отключить звуковой сигнал / звонок в Secure Shell в Chrome OS

    Две точные копии папки с использованием только FTP и командной строки

    Как увеличить размер раздела ext4 на debian

    Скрипт Unix Solaris для выполнения команд на нескольких удаленных хостах

    Могу ли я настроить свой домашний каталог Linux на другом разделе

    Поддерживается ли CentOS PPC64 программой Freescale T2080 RDB?

    Драйвер беспроводной сети ndiswrapper не подключается к обнаруженной сети Wi-Fi

    Компиляция Netcat с DFLAGS

    Запросить страницу руководства пользователя для определенного флага

    Удалить все файлы с исполняемым разрешением в каталоге

    Неправильное поведение VirtualBox, когда фокус мыши с iMac Maverick на vm работает с Debian wheezy

    Linux и Unix - лучшая ОС в мире.