Logrotate:scp 将文件旋转到不同位置

Logrotate:scp 将文件旋转到不同位置

我有一个日志文件,它应该在达到特定大小(例如 50MB)后轮换。旋转后,应将其压缩,并且必须将日期附加到旋转的文件名中。现在,必须将旋转的文件复制到文件服务器。

为此,我编写了一个无法工作的配置。

/var/log/test.log {
    compress
    missingok
    size 50M
    rotate 6
    create
    dateext
    postrotate
        rsync -avzr /var/log/test.log* REMOTE-HOST:/path/to/directory/
    endscript
}

当我运行ls /var/log/test.log*目录(在本地系统上)时,我可以找到旋转的文件test.log-20150211.gz和一个空文件test.log。在 REMOTE-HOST 上,找到了旋转文件的未压缩版本test.log-20150211和空日志文件。test.log

我担心的是,

  1. 为什么压缩日志文件没有传输到远程主机?
  2. 为了仅传输旋转的文件应该做什么?

编辑:

我还发现,在日志轮换后,服务syslog停止了(通过运行检查时发现日志记录进程已停止tailf test.log)。需要再次重新启动该服务。我还应该添加service syslog restartpostrotate部分吗?

答案1

为什么压缩日志文件没有传输到远程主机?

压缩几乎是最后发生的事情,因此在达到这一步postrotate之前仍然会发生。logrotate您可以查看手册页以获取以下示例postrotate

日志文件轮换后(但在压缩旧版本日志之前),/sbin/killall -HUP syslogd将执行命令[来自 postrotate 脚本]。

您最好将其rsync作为 cronjob 运行。

为了仅传输旋转的文件应该做什么?

rsync只是匹配原始文件名(因为*也将匹配没有更多字符的文件)使用更具体的源名称来消除该匹配:

rsync -avzr /var/log/test.log-* REMOTE-HOST:/path/to/directory/

相关内容