(Изменить: переработанный вопрос, чтобы избежать путаницы с системным журналом)

Немного странного поведения systemd, которое я хотел бы подтвердить как ошибку, сбой документации или PEBCAK.

Рассмотрим очень простой модуль, который запускается от имени пользователя root:

# cat > /etc/systemd/system/testecho.service <<EOF
[Service]
Type=oneshot
ExecStart=/bin/echo 'Hello world'
User=root
EOF
# systemctl daemon-reload

Если User=root (или User не указан), стандартный вывод переходит в журнал, помеченный как журнал устройства, как и следовало ожидать:

# journalctl -u testecho -f &
# systemctl start testecho
Jan 21 19:37:33 atlassian-app01.phx7.llnw.com systemd[1]: Starting testecho.service...
Jan 21 19:37:33 atlassian-app01.phx7.llnw.com echo[13479]: Hello world
Jan 21 19:37:33 atlassian-app01.phx7.llnw.com systemd[1]: Started testecho.service.

Однако, когда служба запускается от имени любого пользователя без полномочий root, например, nobody , stdout не помечается как модуль и не будет отображаться, если вы запустите journalctl с -u:

# cat > /etc/systemd/system/testecho.service <<EOF
[Service]
Type=oneshot
ExecStart=/bin/echo 'Hello world'
User=nobody
EOF
# systemctl daemon-reload
# journalctl -u testecho -f &
# systemctl start testecho
Jan 21 19:38:56 atlassian-app01.phx7.llnw.com systemd[1]: Starting testecho.service...
Jan 21 19:38:56 atlassian-app01.phx7.llnw.com systemd[1]: Started testecho.service.

На самом деле stdout идет в журнал, но без тега _SYSTEMD_UNIT. Stdout можно увидеть, отключив -u testunit:

# journalctl -f &
systemctl start testecho
# systemctl start testecho
Jan 21 19:42:04 atlassian-app01.phx7.llnw.com systemd[1]: Starting testecho.service...
Jan 21 19:42:04 atlassian-app01.phx7.llnw.com echo[13719]: Hello world
Jan 21 19:42:04 atlassian-app01.phx7.llnw.com systemd[1]: Started testecho.service.

Это также можно подтвердить, запустив journalctl -o json-pretty -f . Когда User= не root, нет "_SYSTEMD_UNIT" : "testecho.service" .

Документы по StandardOutput = ничего не говорят о волшебной дисперсии, основанной на User , и не делают никаких документов для User =. Все, что они говорят, это то, что StandardOutput наследует DefaultStandardOutput и по умолчанию использует journal .

Я что-то пропустил? Я отмечаю, что стандартный вывод моей службы всегда идет в системный журнал, независимо от User

Я видел это на systemd 229 и 231, работающих на Ubuntu 16.04 и 16.10 соответственно.

Спасибо!

1 ответ1

1

Это звучит как известная проблема, которую в настоящее время не планируется исправлять. Увидеть:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .