記録されるログファイルのサイズを>>
200MBに制限する方法は?
$ run_program >> myprogram.log
答え1
アプリケーション(例run_program
)がログファイルサイズの制限をサポートしていない場合は、外部アプリケーションまたはスクリプトを使用して通常のループでファイルサイズを確認できます。
また、使用することができますlogrotate(8)
ログを回転させるためにsize
その目的に使用できるパラメータがあります。
これにより、指定されたサイズに達するとログファイルが回転します。サイズはバイト(デフォルト)、キロバイト(sizek)、またはメガバイト(sizem)で指定できます。
答え2
プログラムがこの制限より大きい追加ファイルを書き込む必要がない場合は、カーネルにこの制限を知らせることができますulimit
。コマンドを実行する前に、次のコマンドを実行して、現在のシェルセッションで実行されているすべてのプロセスのファイルサイズ制限を200 MBに設定してください。
ulimit -f $((200*1024))
これによりシステムが保護されますが、ファイルを作成するプログラムに干渉が発生する可能性があります。 〜のようにEyaziciが提案しました。、logrotate
特定のサイズまたは期間に達したら、ログファイルをクリーンアップするように設定することをお勧めします。古いデータを破棄したり、一定期間にわたって一連の圧縮ファイルとして保存したりできます。
答え3
新しいファイルシステムイメージを作成し、ループデバイスを使用してそれらをマウントしたら、そのファイルシステムにログファイルを配置できます。
dd if=/dev/zero of=./200mb.img bs=1024 count=200000 # create new empty 200MB file
mkfs.ext2 200mb.img # or ext3, or whatever fits your needs
mkdir logs
sudo mount -t ext2 -o loop 200mb.img logs # only root can do '-o loop' by default
run_program >>logs/myprogram.log
メモリが十分な場合は、tmpfs
ファイルの代わりに使用することもできます。
答え4
パッケージに役立つapache2-utils
ユーティリティがありますrotatelogs
。
要約:
ログの回転 [ -l ] [ -Lリンク名][-pプログラム] [ -f ] [ -t ] [ -v ] [ -e ] [ -c ] [ -nファイル数] ログファイル回転時間|ファイルサイズ(B|K|M|G) [オフセット]
例:
your_program | rotatelogs -n 5 /var/log/logfile 1M
完全なマニュアルを読むことができます。このリンク。