logrotate开源软件
logrotate为日志备份开源软件,其开源license为GPL。在Linux系统下,一般都默认安装好,配合syslog使用,可以使用man logrotate查看帮助信息:
NAME
logrotate - rotates, compresses, and mails system logs
SYNOPSIS
logrotate [-dv] [-f|--force] [-s|--state file] config_file ..
logrotate使用的主要在于掌握其配置文件语法,命令中常用选项为-f,表示强制执行备份动作(忽略触发备份的条件)
logrotate配置文件
一个典型示例配置文件如下:
# sample logrotate configuration file
compress
/var/log/messages {
prerotate
sh prerotate.sh #"execute prerotate script"
endscript
compress #compress the log
create mode owner group #specify the log's owner and file mode
rotate 5 #max rotate count
size 100k #rotate begin when the file size excess 100k
postrotate
sh postrotate.sh #"execute prerotate script"
endscript
}
其中,prerotate和postrotate用于指定当触发备份时执行的动作(相当于初始化和退出清理动作);
更多的选项可以参考man
logrotate源码获取
可以从Logrotate-3.11.0下载,依赖popt
logrotate的源码不多,也比较容易看懂,有兴趣的可以自行了解,一般在需要增加另外的配置选项时才会去修改源码。
syslog-ng-ctl
syslog-ng-ctl是和syslog-ng配套的软件,其源码也在syslog-ng源码包中,其使用unix-socket和syslog-ng进行通信,用于控制syslog-ng的一些行为,比如重新加载配置文件(syslog-ng-ctl reload,适用于在配置文件发生变化时,通知syslog-ng重新解析配置文件并用新的配置运行)等,具体可以通过syslog-ng-ctl -h查看。
使用logrotate对syslog-ng进行日志备份
有了logrotate和syslog-ng-ctl工具,下面说说如何对syslog-ng进行日志备份:
1、 写个小程序(类似cron定时任务的),定时执行下logrotate
其中logrotate配置中可以使用文件大小或者时间条件,当日志满足条件的时候触发备份;
记得在logrotate配置文件(logrotate.conf)中的加上
postrotate
syslog-ng-ctl reload
endscript
让syslog-ng重新加载下配置。这是因为当触发日志备份时,syslog-ng的输出文件被移除了,需要重新reload下,syslog-ng才会重新生成输出文件。