一、logrotate日志切割
1、概要说明
logrotate工具是为了方便进行日志管理而产生的一个工具,主要可以完成的工作包含:基于天、周、月、文件大小进行日志的滚动备份、压缩、删除甚至是发送邮件。
2、调用运行方式
- 每天晚上,cron daemon会自动执行/etc/cron.daily目录下的任务。它会触发/etc/cron.daily/logrotate文件,logrotate一般是随linux安装的。
- logrotate文件中定义了待执行命令:/usr/sbin/logrotate /etc/logrotate.conf
- /etc/logrotate.conf 包含了/etc/logrotate.d目录下的所有脚本(所以自定义脚本日志滚动脚本需要放置在此目录)。
3、logrotate命令语法
格式:logrotate [-dv][-f] [-s] config_file+
-v 显示详细信息
-d 开启调试模式,输出执行过程,但是不会对日志和logrotate的state文件产生操作后果
-f 忽略调用周期,强制执行logrotate
-m 指定logrotate发送邮件的命令
-s 多个logrotate运行时,告知logrotate自己使用的state文件(/var/log/logrotate.status)
4、logrotate配置文件参数说明
daily 表示每天整理一次,其它可用值为‘weekly’、‘monthly’、‘yearly’
rotate 30 表示保留30份的备份文件
dateext 表示让旧日志文件以日期命名
compress\nocompress 表示使用压缩转储或不使用压缩转储,默认不适用
delaycompress 与compress一起使用,延时压缩,转储日志文件到下一次转储是才压缩
copytruncate 表示先复制log文件内容,然后在清空,用于无重新打开日志文件命令的情况。以Nginx为例,/usr/local/nginx/sbin/nginx -s reopen。但是其他的应用程序不一定遵循这样的约定,比如说MySQL是通过flush-logs来重新打开日志文件的。更有甚者,有些应用程序就压根没有提供类似的方法,此时如果想重新打开日志文件,就必须重启服务,但为了高可用性,这往往不能接受。还好Logrotate提供了一个名为copytruncate的指令,此方法采用的是先拷贝再清空的方式,整个过程中日志文件的操作句柄没有发生改变,所以不需要通知应用程序重新打开日志文件,但是需要注意的是,在拷贝和清空之间有一个时间差,所以可能会丢失部分日志数据。
size 5M 日志文件大小增长到5MB再进行轮循。
notifempty 如果日志文件为空,轮循不会进行
missingok 在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。
postrotate\endscript 在转储以后执行命令,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。