我在 Linux 中有一些应用程序,它们创建每个大约 41 MB 的日志文件。一旦这 41MB文件完成,应用程序就会从 切换log.1
到log.2
并开始覆盖。log.2
log.1
log.2
我想以每当新文件大小超过 1MB 时就对其他文件 ( ) 进行备份(gzip 并存储在另一个位置)的方式来备份这些文件log.1
。
我一直在使用一个脚本,每当文件达到 41MB 时就会对其进行备份,但这里的问题是有时该 41MB 文件备份由脚本处理,而数据仍然以很高的速率写入同一个文件。由于几秒钟的日志数据丢失,这就是我尝试在新文件达到 1MB 或其他文件时备份其他文件的替代方法的原因,以便我确信其他文件已完成写入。
知道我该怎么做吗?
答案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
你可以试试对数旋转, 提到了一些例子这里
这尺寸一旦日志达到指定大小(例如 41MB),选项将允许您轮换日志。
使用后旋转选项,执行自定义脚本,您可以使用该脚本将轮换的日志文件传输到另一个位置。