Я в настоящее время пытаюсь сделать 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? Заранее спасибо, любая справка с этим очень ценилась бы!
На самом деле буферизация в UNIX зависит от контекста: когда stdout перенаправляется к чему-то интерактивному как консоль - это обычно с буфером строки, иначе это полностью буферизуется.
Буферизация может быть изменена в приложении с помощью вызов библиотеки setvbuf .
, Но это может также быть сделано с команда stdbuf на запуске:
ExecStart=/usr/bin/stdbuf -oL /opt/foo/.cabal-sandbox/bin/foo
(для случая с буфером строки)
По умолчанию на журналы Ubuntu 15.04 , systemd только энергозависимы и сохранены в /run/systemd/journal
и потеряны в каждой перезагрузке. Для использования персистентный журнал systemd необходимо создать /var/log/journal
каталог (и перезапустить systemd-journald.service).
Так, может быть, stdout
, вывод просто перенаправлен к syslog
и не сохранен в журнал systemd. Для этого Вы, возможно, должны использовать персистентный журнал systemd, как объяснено выше.
Вы проверили /var/log/syslog
на Ваш foo
журнал?