logrotateなしでログファイルのサイズを固定したままにする

logrotateなしでログファイルのサイズを固定したままにする

新しい空のファイルに置き換えて、古いファイルを削除(またはアーカイブ)せずにログファイルのファイルサイズを固定したままにする方法はありますか?たとえば、ログファイルの最大サイズを1 MBに設定すると、ファイルサイズがその制限を超えると自動的に固定され、テキストが「尾」に追加され、テキストの最も古い部分がポップアップします。ファイルサイズを1MBに保ちます。

答え1

これを行うには、小さなbashスクリプトを書くことができます。tail -cファイルを上書きするには、特定のバイト数までtailファイルを使用できます。

からman tail

-c, --bytes=N
              output the last N bytes; alternatively, use +N to  output  bytes
              starting with the Nth of each file

   If  the  first  character of N (the number of bytes or lines) is a `+',
   print beginning with the Nth item from the start of each  file,  other‐
   wise, print the last N items in the file.  N may have a multiplier suf‐
   fix:  b  512,  kB  1000,  K  1024,  MB  1000*1000,  M   1024*1024,   GB
   1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.

答え2

私は元のポスターが8年後に解決策を見つけたと確信しています。このトピックを読むことができる他の人のための別の記事があります。

curtailは、次のコマンドを使用してプログラム出力のサイズを制限し、最後の200MBの出力を保持します。

プログラムの実行縮小 -s 200M myprogram.log

https://github.com/Comcast/Infinite-File-Curtailer

答え3

唯一の解決策は、独自のユーザー空間ファイルシステムを作成するか、既存のファイルシステムに貢献することです。部分リストを見るユーザー空間のファイルシステム

貢献する能力がない場合は、プロジェクトピッチ、$$$、またはその両方を提供して追加してください。

時間があったらよかったのに、いつもこんなことが欲しかったです。

答え4

これが私の2番目の答えです。これはかなりハッキングです。

watch(1)を使用して実行を繰り返しますtail --bytes=1024(ログファイルの最後の1024バイト、答えを与えた@jjclarksonに感謝します)。

watch --no-title tail --bytes=1024 /var/log/messages >/tmp/messages.watch

次に、次のコマンドを使用してファイルを表示します。

less --raw-control-chars /tmp/messages.watch

watchwhileループとの違いは、watch/var/log/messagesが変更されると/tmp/messages.watchのみが更新されることです。

while true; do
    tail --bytes=1024 /var/log/messages > /tmp/messages.watch
    sleep 1
done

さて、/var/log/messagesが更新されたときにのみtailが実行されるようにwhileループを入れることができるようですが、test今はわかりません。

関連情報