systemd サービスの stdout/stderr ビュー

systemd サービスの stdout/stderr ビュー

カスタムアプリケーション用の簡単なシステムサービスファイルを作成しました。手動で実行するとアプリケーションが正常に実行されますが、systemdを使用して実行するとCPUが消費されます。

問題が何であるかを調べようとしていますが、出力をどこで見つけることができるか(または出力をどこかに入れるようにsystemdを設定する方法)、わかりません。

これは私のサービスファイルです。

[Unit]
Description=Syncs files with a server when they change
Wants=network.target
After=network.target

[Service]
ExecStart=/usr/local/bin/filesync-client --port 2500
WorkingDirectory=/usr/local/lib/node_modules/filesync-client
Restart=always

[Install]
WantedBy=multi-user.target

アプリケーション全体でstdoutとstderrに出力しました。

デーモンの出力を読む方法は?

編集する:

を見つけましたが、man systemd.execそのStandardOutput=オプションは言及されていますが、使用方法がわかりません。 ~からマニュアルページ:

StandardOutput=

実行されたプロセスのファイル記述子1(STDOUT)が接続される場所を制御します。そのうちの1つを取る継承する無効端末システムログキロメートル情報キロメートルメッセージ+コンソールシステムログ+コンソールまたはソケット

に設定した場合継承する標準入力のファイル記述子は標準出力にコピーされます。に設定した場合無効標準出力はに接続されています/dev/null。つまり、ここに記録されている内容はすべて失われます。に設定した場合端末標準出力はttyに接続されています(次の構成)。TTYPath=、下記参照)。出力にTTYのみを使用すると、実行プロセスは端末を制御するプロセスではなく、他のプロセスが端末を解放するまで失敗または待機しません。 システムログ標準出力をsyslog(3)システムロガーに接続します。 キロメートル情報これをdmesg(1)を介してアクセスできるカーネルログバッファに関連付けます。 システムログ+コンソールそしてキロメートルメッセージ+コンソール同様に機能しますが、出力をシステムコンソールにコピーすることもできます。 ソケットソケットの有効化では、対応するオプションと同様の意味を使用して、標準出力をソケットに接続します。StandardInput=。この設定のデフォルト値は継承です。

これはこれが私の唯一の選択であることを意味しますか?たとえば、入力出力/dev/shmなどが必要です。私はUnixドメインソケットを使ってシンプルなリスナーを書くことができると思いますが、それは少し不要なようです。

これはデバッグのためだけに必要であり、最終的にほとんどのログを削除して出力をsyslogに変更することができます。

ベストアンサー1

修正する

マクマカナが指摘したように、システムログこれで、ほとんどのディストリビューションの標準ロギング機能です。stdoutシステム単位の合計を表示するには、次を使用します。stderrjournalctl注文する。

sudo journalctl -u [unit]

元の答え

デフォルトでは、stdoutシステム単位の合計はsyslogに送信されます。stderr

完全なsystemdを使用している場合はアクセスできますjournalctl。 Fedoraではそうする必要があります/var/log/messagesが、syslogはルールが指示する場所にそれを配置します。

投稿日のためにほとんどの人がFedoraを介してsystemdに公開されていると仮定すると、ここに記載されているエラーが発生する可能性があります。 https://bugzilla.redhat.com/show_bug.cgi?id=754938 また、それがどのように機能するかを非常によく説明しています=)(これはエラーメッセージが記録されないselinux-policyのバグであり、で修正されました。selinux-policy-3.10.0-58.fc16

おすすめ記事