web-dev-qa-db-ja.com

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

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

現在、私はこのコードを使用しています。これにより、ログファイルの小さな断片が得られます。

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

結果の例を示すには、任意のサービスについて上記のコマンドを入力し、ログの最後までスクロールします。次に、最後から300行をコピーします。

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

30
user3191334
journalctl --unit=my.service -n 100 --no-pager
67
sourcejedi

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

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

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

10
dr_

最後のn行数を確認したい場合andログに出力される新しいメッセージを確認するには、これを試してください:

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

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

7
Derek Soike

ただ:

journalctl -u SERVICE_NAME -e

パラメータ-e を意味する:

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

5
Daniel Kmak

テールコマンドソリューションが提供されているので、私はsedコマンドを使って試しましたが、うまくいきました

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

journalctl --unit=my.service | sed -e :a -e '$q;N;301,$D;ba' 
1