web-dev-qa-db-ja.com

Journaldでエラーメッセージを表示する方法

ゼロ除算エラーを意図的に作成したプログラムを作成しました。

コマンドラインで実行すると、「浮動小数点例外」が返されます。

しかし、これをsystemdサービスとして実行すると、このエラーメッセージが表示されません。私のsystemdスクリプトに追加しました:StandardError = journal

しかし、journalctlを使用すると、エラーメッセージはどこにも表示されません。このエラーメッセージを、journalctlを使用して表示されるログに追加するにはどうすればよいですか?

7
Thomas

journalctlを使用して実行中のサービスのすべてのエラーを取得するには:

$ journalctl -p 3 -xb

どこ -p 3 手段 priority err-xは追加のメッセージ情報を提供し、-bは、最後の起動以降を意味します

8
Subroto

デフォルトでは、systemdユニットのstdoutとstderrがsyslogに送信されます。したがって、/var/log/messagesまたは/var/log/dmesgファイルでそれらにアクセスできます。

これを変更するには、次のコマンドを使用できます。

Sudo journalctl -u [yourunit]

ここで、[yourunit]はsystemd .service名です。たとえば、yourapp.serviceからのメッセージを表示するには、

Sudo journalctl --unit=yourapp

次に、コマンドを使用してjournalctlを再起動します

Sudo systemctl restart systemd-journald

これが機能しない場合は、systemdスクリプトにStandardOutput=syslog+consoleおよびStandardError=syslog+consoleを追加して、systemctlを再起動します。その後、journalctlを使用してユニットの出力にアクセスできます。

1
Dababi

JdeBPがヒントを出そうとしているため、シェルからプログラムを実行し、それがシグナルSIGFPEによって強制終了されると、特定のメッセージ「浮動小数点例外」がShellによって出力されます。技術的にはプログラムcouldはシグナルをキャッチし、そのように記述した場合はエラーを出力しますが、それはSIGKILLでは機能しません。

プログラムの終了ステータスを読み取り、それについてログを記録するには、wait()または同様のものを使用するsome親プロセスが必要です。 systemdサービスマネージャーはそのような親です。そのメッセージは同一に見えませんが、ジャーナルでサービスのログを見ると、すべきに相当するものがあります。 SIGFPEについて言及しているかもしれません。

さらに、systemd-coredumpを有効にしている場合、SIGFPEのクラッシュメッセージがログに記録されるはずです。これは、この信号のデフォルトのアクションがコアダンプの生成であるためです。これらのクラッシュメッセージは、サービスのメッセージを照会するときに表示されるようにタグ付けする必要があります。私はsystemd-coredumpが好きで、必ずDebianシステムで有効にしてください。現在インストールすると、UbuntuのクラッシュレポーターであるApportが削除されます。開発時に、コアファイルを直接処理し、systemd-coredumpを使用しないことを好む人もいますが、コアダンプによってディレクトリが乱雑にならないのはいいことですが、しばらくするとクリーンアップされます(ディスクスペース)。

0
sourcejedi