systemd на 15,04 не зарегистрирует stdout единицы

Я в настоящее время пытаюсь сделать systemd единицу как веб-сервер. В настоящее время, мой foo.service файл смотрит следующим образом:

[Unit]
Description=The Foo Web Server

[Service]
Type=simple
ExecStart=/opt/foo/.cabal-sandbox/bin/foo

[Install]
WantedBy=multi-user.target

foo исполняемый файл автоматически регистрирует все Запросы HTTP к stdout - это хорошо тестируется. Однако, когда я просматриваю журналы с journalctl -u foo, Я только произвожусь как это:

...
May 06 17:46:57 localhost systemd[1]: Stopping The Foo Web Server...
May 06 17:46:57 localhost systemd[1]: Started Foo Web Server.
May 06 17:46:57 localhost systemd[1]: Starting The Foo Web Server...
May 06 17:47:08 localhost systemd[1]: Stopping The Foo Web Server...
May 06 17:47:08 localhost systemd[1]: Started The Foo Web Server.
May 06 17:47:08 localhost systemd[1]: Starting The Foo Web Server...

Кто-то мог объяснить, почему это не регистрирует весь вывод stdout? Я посмотрел кратко на этот предыдущий вопрос, но он не помогает - однако он сослался на что-то вроде, "... может не работать на системы, которые не используют полный systemd" - это имело бы место для Ubuntu 15.04? Заранее спасибо, любая справка с этим очень ценилась бы!

11
задан 13 April 2017 в 05:37

2 ответа

На самом деле буферизация в UNIX зависит от контекста: когда stdout перенаправляется к чему-то интерактивному как консоль - это обычно с буфером строки, иначе это полностью буферизуется.

Буферизация может быть изменена в приложении с помощью вызов библиотеки setvbuf .

, Но это может также быть сделано с команда stdbuf на запуске:

ExecStart=/usr/bin/stdbuf -oL /opt/foo/.cabal-sandbox/bin/foo

(для случая с буфером строки)

8
ответ дан 23 November 2019 в 04:09

По умолчанию на журналы Ubuntu 15.04 , systemd только энергозависимы и сохранены в /run/systemd/journal и потеряны в каждой перезагрузке. Для использования персистентный журнал systemd необходимо создать /var/log/journal каталог (и перезапустить systemd-journald.service).

Так, может быть, stdout, вывод просто перенаправлен к syslog и не сохранен в журнал systemd. Для этого Вы, возможно, должны использовать персистентный журнал systemd, как объяснено выше.

Вы проверили /var/log/syslog на Ваш foo журнал?

0
ответ дан 23 November 2019 в 04:09

Другие вопросы по тегам:

Похожие вопросы: