如何持续备份日志文件?

如何持续备份日志文件?

我在 Linux 中有一些应用程序,它们创建每个大约 41 MB 的日志文件。一旦这 41MB文件完成,应用程序就会从 切换log.1log.2并开始覆盖。log.2log.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),选项将允许您轮换日志。
使用后旋转选项,执行自定义脚本,您可以使用该脚本将轮换的日志文件传输到另一个位置。

相关内容