Показать журнал пользователя системного аккаунта

Вопрос или проблема

У меня есть сервис, созданный с помощью quadlet /var/minecraft/.local/containers/systemd/minecraft.container, который включен и запускается, когда моя система загружается, всякий раз, когда я включаю компьютер. Он работает под учетной записью minecraft-server, домашняя директория которой установлена в /var/minecraft.

Эта учетная запись является системной. У меня уже были большие трудности с тем, чтобы выяснить, как ее запустить/остановить.

# Я ожидал, что смогу сделать следующее:
sudo -u minecraft-server systemctl --user status minecraft.service # Не сработает

# Однако мне действительно нужно использовать опцию -M:
sudo systemctl -M minecraft-server@ --user status minecraft.service # Сработает

Я могу просмотреть логи этого сервиса, сделав следующее:

# Мне нужно вручную отфильтровать по `_SYSTEMD_USER_UNIT` и `_UID`
sudo journalctl _SYSTEMD_USER_UNIT=minecraft.service _UID=$(id -u minecraft-server)

# В качестве альтернативы просто фильтрация по `_SYSTEMD_USER_UNIT` также сработает.
sudo journalctl _SYSTEMD_USER_UNIT=minecraft.service 

# Это не сработает, к моему удивлению:
sudo -u minecraft-server journalctl --user
sudo -u minecraft-server journalctl --user --unit minecraft
sudo -u minecraft-server journalctl --user-unit minecraft
sudo -u minecraft-server journalctl --user --user-unit minecraft

# Все они выдают эту ошибку:
# 
# Подсказка: Вы в настоящее время не видите сообщения от других пользователей и системы.
#       Пользователи в группах 'adm', 'systemd-journal' могут видеть все сообщения.
#       Передайте -q, чтобы отключить это уведомление.
# Никакие журнальные файлы не были открыты из-за недостаточных прав.

Я включил задержку для своей учетной записи minecraft-server, и мой journald настроен с Storage=persistent, что является распространенными решениями, которые я нашел, когда искал эту проблему.

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

Ответ или решение

Для корректного доступа к журналам systemd для службы, запущенной под системной учетной записью, вам потребуется использовать подход, который соответствует ограничениям, накладываемым на учетные записи пользователей и их окружение. Вы уже нашли некоторые методы доступа к журналам для учетной записи minecraft-server, но я подскажу более оптимальные и правильные способы.

  1. Используйте systemd с флагом -M: Как вы уже указали, правильный способ для проверки состояния службы — это выполнение команды с флагом -M, что позволяет указать конкретную сессию пользователя, в которой запущена служба. Вы можете делать это следующим образом:

    sudo systemctl -M minecraft-server@ --user status minecraft.service
  2. Доступ к журналам через journalctl: Ваш метод фильтрации записей журнала через _SYSTEMD_USER_UNIT и _UID действительно работает, однако для упрощения вы можете использовать команду, которая сразу обеспечивает доступ к нужным вам записям:

    sudo journalctl _SYSTEMD_USER_UNIT=minecraft.service

    Этот подход уже хорош для получения логов, однако он предполагает использование sudo, так как у пользователя minecraft-server могут быть недостаточные права доступа.

  3. Настройка разрешений для systemd-journal: Если вы хотите избежать постоянного использования sudo, в первую очередь убедитесь, что учетная запись minecraft-server принадлежит к группе systemd-journal. Это можно сделать следующей командой:

    sudo usermod -aG systemd-journal minecraft-server

    После этого вы получите доступ к журналам без необходимости использовать sudo, но вам нужно будет выйти и снова войти под этой учетной записью или перезапустить сессию.

  4. Включение возможности ‘linger’ : Вы уже упомянули, что включили linger для minecraft-server. Это хорошо, это позволяет службе работать в фоновом режиме даже после выхода из системы. Вы можете убедиться, что linger включен, следующим образом:

    loginctl enable-linger minecraft-server
  5. Настройки журнала: Проверьте файл конфигурации journald. Убедитесь, что опция Storage=persistent включена и аналогичные параметры правильно настроены для хранения журналов. Это позволит вам не потерять логи после перезагрузки системы.

  6. Использование системного управления: Если вам нужно часто взаимодействовать с учетной записью через systemctl, можно создать собственный скрипт или alias, который будет выполнять необходимые команды более удобно.

Таким образом, подводя итог, правильный и удобный способ доступа к журналам другой пользовательской службы в вашем случае заключается в использовании sudo с соответствующими параметрами systemctl и journalctl, а также в правильной настройке групп и linger. Ваш текущий метод, хоть и рабочий, можно улучшить благодаря добавлению вашей учетной записи в группу systemd-journal, что упростит доступ к журналам.

Оцените материал
Добавить комментарий

Капча загружается...