Debianのsystemctlサービスから最後のX行を出力する方法を探しています。このコードを、印刷された最新のログエントリを使用するスクリプトにインストールします。 this の投稿を見つけましたが、目的に合わせて変更することができませんでした。
現在、私はこのコードを使用しています。これにより、ログファイルの小さな断片が得られます。
journalctl --unit=my.service --since "1 hour ago" -p err
結果の例を示すには、任意のサービスについて上記のコマンドを入力し、ログの最後までスクロールします。次に、最後から300行をコピーします。
私の考えは、egrep exを使用することです。 egrep -m 700 .
しかし、今から運がありませんでした。
journalctl --unit=my.service -n 100 --no-pager
出力をtail
にパイプするだけです:
journalctl --unit=my.service | tail -n 300
tail
コマンドは、stdinで受け取った最後の行(デフォルトでは10行)をstdoutに出力します。
最後のn行数を確認したい場合andログに出力される新しいメッセージを確認するには、これを試してください:
journalctl -u <service name> -n <number of lines> -f
どこ -n
は、ログの末尾から表示する行数を示し、-f
は、ログが変更されたときにログを追跡することを指定します。
ただ:
journalctl -u SERVICE_NAME -e
パラメータ-e
を意味する:
-e --pagerend;暗黙のポケットベルツール内でジャーナルの最後にすぐにジャンプします。これは、ページャーが無制限のサイズのログをバッファーしないことを保証するために-n 1000を意味します。これは、明示的な-nで他の数値を使用してオーバーライドできますが、-nallはこの上限を無効にします。
テールコマンドソリューションが提供されているので、私はsedコマンドを使って試しましたが、うまくいきました
以下のコマンドは最後の300行を表示します
journalctl --unit=my.service | sed -e :a -e '$q;N;301,$D;ba'