現在、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の場合ですか?事前に感謝します、これに関するどんな助けも大歓迎です!
実際、UNIXでのバッファリングはコンテキストに依存します。stdoutがコンソールのようなインタラクティブなものにリダイレクトされるとき-通常はラインバッファリングされ、そうでない場合は完全にバッファリングされます。
setvbufライブラリ呼び出しを使用して、アプリケーション内でバッファリングを変更できます。
ただし、起動時にstdbufコマンドを使用しても実行できます。
ExecStart=/usr/bin/stdbuf -oL /opt/foo/.cabal-sandbox/bin/foo
(ラインバッファリングの場合)
デフォルトではUbuntu 15.04、systemdジャーナルは揮発性であり、/run/systemd/journal
に保持され、再起動のたびに失われます。 persistentsystemdジャーナルを使用するには、/var/log/journal
ディレクトリを作成する必要があります(そしてsystemd-journald.serviceを再起動します) )。
したがって、stdout
出力はsyslog
にリダイレクトされ、systemdジャーナルには保存されません。そのためには、上で説明したpersistentsystemdジャーナルを使用する必要があるかもしれません。
foo
ログの/var/log/syslog
を確認しましたか?