web-dev-qa-db-ja.com

15.04のsystemdはユニットの標準出力を記録しません

現在、webdサーバーとして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要求を標準出力に自動的に記録します-これは十分にテストされています。ただし、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...

誰かがそれがすべての標準出力を記録しない理由を説明できますか? この前の質問 を簡単に見ましたが、助けにはなりません-しかし、「...を使用しないシステムでは機能しないかもしれませんfullsystemd "-これはUbuntu 15.04の場合ですか?事前に感謝します、これに関するどんな助けも大歓迎です!

11
Athan Clark

実際、UNIXでのバッファリングはコンテキストに依存します。stdoutがコンソールのようなインタラクティブなものにリダイレクトされるとき-通常はラインバッファリングされ、そうでない場合は完全にバッファリングされます。

setvbufライブラリ呼び出しを使用して、アプリケーション内でバッファリングを変更できます。

ただし、起動時にstdbufコマンドを使用しても実行できます。

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

(ラインバッファリングの場合)

8
Velkan

デフォルトではUbuntu 15.04systemdジャーナルは揮発性であり、/run/systemd/journalに保持され、再起動のたびに失われます。 persistentsystemdジャーナルを使用するには、/var/log/journalディレクトリを作成する必要があります(そしてsystemd-journald.serviceを再起動します) )。

したがって、stdout出力はsyslogにリダイレクトされ、systemdジャーナルには保存されません。そのためには、上で説明したpersistentsystemdジャーナルを使用する必要があるかもしれません。

fooログの/var/log/syslogを確認しましたか?

0
solsTiCe