カスタムアプリケーション用の簡単なシステムサービスファイルを作成しました。手動で実行するとアプリケーションが正常に実行されますが、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
システム単位の合計を表示するには、次を使用します。stderr
journalctl
注文する。
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
)
答え2
より短く、簡単で、従来ではない答え:
sudo journalctl -u [unitfile]
ここで [unitfile] はシステム.service
名です。たとえば、次からmyapp.service
送信されたメッセージを表示するには
sudo journalctl --unit=myapp
リアルタイム追跡ログ:
sudo journalctl -f -u myapp