systemd 15.04 не будет регистрировать стандартный вывод устройства

В настоящее время я пытаюсь сделать системный модуль в качестве веб-сервера. В настоящее время мой 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-запросы на стандартный вывод - это хорошо проверено. Однако, когда я просматриваю логи с 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? Заранее спасибо, любая помощь с этим будет высоко ценится!

2 ответа

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

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

Но это также можно сделать командой stdbuf при запуске:

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

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

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

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

Вы проверили /var/log/syslog для тебя foo журнал?

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