我有一个日志文件,它应该在达到特定大小(例如 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
我担心的是,
- 为什么压缩日志文件没有传输到远程主机?
- 为了仅传输旋转的文件应该做什么?
编辑:
我还发现,在日志轮换后,服务syslog
停止了(通过运行检查时发现日志记录进程已停止tailf test.log
)。需要再次重新启动该服务。我还应该添加service syslog restart
该postrotate
部分吗?
答案1
为什么压缩日志文件没有传输到远程主机?
压缩几乎是最后发生的事情,因此在达到这一步postrotate
之前仍然会发生。logrotate
您可以查看手册页以获取以下示例postrotate
:
日志文件轮换后(但在压缩旧版本日志之前),
/sbin/killall -HUP syslogd
将执行命令[来自 postrotate 脚本]。
您最好将其rsync
作为 cronjob 运行。
为了仅传输旋转的文件应该做什么?
您rsync
只是匹配原始文件名(因为*
也将匹配没有更多字符的文件)使用更具体的源名称来消除该匹配:
rsync -avzr /var/log/test.log-* REMOTE-HOST:/path/to/directory/