systemctlサービスログから最新のx行を確認する方法


21

Debianのsystemctlサービスから最後のX行を単に印刷する方法を探しています。このコードを、印刷された最新のログエントリを使用するスクリプトにインストールしたいと思います。この投稿を見つけましたが、自分の目的に合わせて変更できませんでした。

現在、私はこのコードを使用しています。これは、ログファイルの小さな断片を提供するだけです。

journalctl --unit=my.service --since "1 hour ago" -p err

結果がどのように表示されるかを示す例として、上記のコマンドをサービスに入力して、ログの最後までスクロールします。次に、最後から300行を下からコピーします。

私の考えは、egrep exを使用することです。egrep -m 700 .しかし、私は今から運がありませんでした。

回答:



7

出力をパイプするだけtailです:

journalctl --unit=my.service | tail -n 300

このtailコマンドは、stdinで受信した最後の行(デフォルトでは10)をstdoutに出力します。


1
尾を完全に忘れました-素晴らしいアイデア、ありがとうございました!
user3191334

5
大きなログの場合、テールは非常に遅くなります。ビルトイン-njournalctrlのは、あなたが望むものです。例journalctl -n 300
ドレイク

4

最後のn表示し、ログに出力される新しいメッセージを表示するには、次を試してください。

journalctl -u <service name> -n <number of lines> -f

where -nは、ログの末尾から表示する行数を示し、-fログが変更されたときに追跡することを指定します。


4

ただ:

journalctl -u SERVICE_NAME -e

パラメータ-eは以下を表します:

-e --pagerend; 暗黙のポケットベルツール内のジャーナルの最後にすぐにジャンプします。これは、ページャーが無制限のサイズのログをバッファリングしないことを保証する-n 1000を意味します。これは、明示的な-nで他の数値とオーバーライドできますが、-nallはこのキャップを無効にします。


1

テールコマンドソリューションが用意されているため、sedコマンドを使用してみましたが、うまくいきました

以下のコマンドは、最後の300行を表示します

journalctl --unit=my.service | sed -e :a -e '$q;N;301,$D;ba' 
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.