Linuxには、それぞれ約41MBのログファイルを生成するいくつかのアプリケーションがあります。 41MBファイルが完了すると、アプリケーションはからに切り替わり、log.1
上書きlog.2
を開始します。log.2
log.1
log.2
新しいファイルサイズが1 MBを超えるたびに別のファイル()をバックアップ(gzipと別の場所に保存)するようにこれらのファイルをバックアップしたいと思いますlog.1
。
私はファイルが41 MBに達するたびにファイルをバックアップするスクリプトを使用してきましたが、問題は、データがまだ非常に高速で同じファイルに書き込まれている間に、41 MBのファイルバックアップがスクリプトによって処理されることです。数秒間ログデータが失われたため、新しいファイルが約1 MBに達したときに別のファイルの書き込みが完了したことを確認するために、別のファイルをバックアップする代替方法を試しています。
どうすればいいのかご存知ですか?
答え1
これはlogrotateを介して行うことができます。以下のApacheログの例を参照してください。
ステップ1#まず、logrotateがシステムにインストールされていることを確認してください。ほぼすべてのLinuxディストリビューションでデフォルトで使用できます。
ステップ2#は/etc/logrotate_apache.conf
次のように作成されます。
#-------------------------------------------------------------------------------------
/var/log/httpd/*log {
missingok
minsize 1M
create
compress
rotate 1
lastaction
/sbin/service httpd reload > /dev/null 2>/dev/null || true
Log_dir="/var/log/httpd/Apache_$(date +%F)/"
# move to other location
[[ ! -d "${Log_dir}" ]] && /bin/mkdir "${Log_dir}" && /bin/mv /var/log/httpd/*.gz "${Log_dir}"
endscript
}
# system-specific logs may be also be configured here.
#-------------------------------------------------------------------------------------
ステップ3#次のようにCronジョブを設定します。
00 * * * * /usr/sbin/logrotate -f /etc/logrotate_apache.conf
答え2
あなたは試すことができますログの回転、いくつかの例を挙げた。ここ
これサイズオプションを使用すると、ログが指定されたサイズ(41 MBなど)に達したときにログを回転できます。
使用バックスピン回転したログファイルを別の場所に転送するために使用できるカスタムスクリプトを実行するオプション。