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

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

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

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

ただし、systemdサービスとして実行すると、このエラーメッセージは表示されません。

私のsystemdスクリプトに以下を追加しました。

StandardError=journal

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

答え1

実行中のサービスに関するすべてのエラーを取得するには、次のコマンドを使用しますjournalctl

$ journalctl -p 3 -xb

ここで-p 3意味はpriority err追加の-xメッセージ情報を提供し、-b最後の開始からの時間を示します。

答え2

デフォルトでは、systemdデバイスのstdoutとstderrはsyslogに送信されます。したがって、ファイル/var/log/messages/var/log/dmesg

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

sudo journalctl -u [yourunit]

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

sudo journalctl --unit=yourapp

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

sudo systemctl restart systemd-journald

それでも問題が解決しない場合は、systemdスクリプトにおよびをStandardOutput=syslog+console追加してsystemctlを再起動してください。StandardError=syslog+consoleその後、Journalctlを使用してデバイスの出力にアクセスできます。

答え3

JdeBPが暗示しようとしているように、シェルでプログラムを実行し、SIGFPE信号によってプログラムが終了すると、「浮動小数点例外」という特定のメッセージが印刷されます。シェル。技術的にあなたのプログラムできるこのように書くと、信号を捕捉してエラーを出力します。しかし、SIGKILLでは機能しません。

あなたはする必要があります一部親プロセスは、wait()または同様の方法を使用してプログラムの終了ステータスを読み取り、それを記録します。サービスマネージャsystemdはそのような親です。情報は同じように見えませんが、しなければならないログ内のサービスログを見ると、同様の内容があります。言及されるかもしれませんSIGFPE

また、このシグナルを有効にした場合、このシグナルの基本操作はコアダンプを生成することであるため、systemd-coredump競合メッセージを記録する必要があります。SIGFPEこれらの競合メッセージは、サービスがメッセージを照会するときに表示されるようにマークする必要があります。私はsystemd-coredumpDebianシステムでこの機能を有効にして有効にするのが好きです。ただし、現在インストールすると、UbuntuのクラッシュレポートApportが削除されます。開発時には、一部の人が使用するのではなく、コアファイルで直接作業することを好むかもしれませんsystemd-coredump。ただし、コアダンプがディレクトリを複雑にすることなく、しばらくしてからクリーンアップされることをお勧めします(ディスク容量の確保)。

関連情報