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