(Изменить: переработанный вопрос, чтобы избежать путаницы с системным журналом)
Немного странного поведения 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 соответственно.
Спасибо!