一、概述
logrotate是对日志文件进行转储、压缩或邮寄等处理的工具,它读取配置文件内容,并根据配置文件内容对日志文件进行处理。
用定期运行工具cron或周期运行工具anacron执行logrotate则可以定期对日志文件进行处理。
cron工作过程:cron为守护进程,每分钟会读取配置文件/etc/crontab,检查设置项与当前系统时间是否相匹配,相匹配则执行设置项中的命令。
cron必须在开机状态下定期执行任务,因此为了避免关机后,错过执行时间导致任务没有执行的情况,用anacron做补充,其原理是比较时间戳文件/var/spool/anacron来判断是否需要执行;对于openrc初始化系统的设备,采取的办法是运行脚本/usr/sbin/run-crons,该脚本会判断文件/var/spool/cron/lastrun/文件的修改时间来判断是否需要执行/etc/cron.{hourly,daily,weekly…}中的脚本是否需要执行,cron的主配置文件crontab中设置run-crons每10分钟执行一次,Red Hat开发了vixie-cron的分支cronie,2009年其中包含了2.3版本的anacron参考
程序:/usr/sbin/logrotate
配置文件:
/etc/logrotate.conf
/etc/logrotate.d/
2、cron程序:/usr/sbin/cron
配置文件:
/etc/crontab
二、logrotate部署
1、编译logrotate;
2、复制关联库POPT库和logrotate可执行文件到目标系统相应目录下;
3、添加logrotate配置文件到/etc/logrotate.d/目录下
例如:logrotate.d/test_file
4、放置脚本文件/etc/cron.daily/logrotate,以定期运行logrotate
内容来源于Ubuntu16.04:/etc/cron.daily/logrotate文件
三、测试文件部署:
1、产生测试文件
在/etc/crontab中最后添加
*/10 * * * * root /bin/date >> /var/log/test_file
注:测试文件位置:/var/log/test_file
或1.1、取消配置文件/etc/crontab中最后一行注释
*/10 * * * * root test -x /usr/sbin/run-crons && /usr/sbin/run-crons
2、修改/etc/crontab的文件属性为644
chmod 644 /etc/crontab
2、添加logrotate配置文件
/etc/logrotate.d/test_file
3、更新至用户配置文件crontab
crontab -u root /etc/crontab
4、确定部署成功
(1)查看cron是否运行
ps -ef | grep cron
(2)10分钟后查看测试文件/var/log/test_file中是否有日期数据
(2)打开cron日志
a、取消/etc/syslog.conf中的注释行
#cron.* /var/log/cron.log
b、查看日志文件/var/log/cron.log
(3)查看测试文件/var/log/test_file中是否有日期数据
4、错误解决
1、若没有成功运行,请查看是否有/etc/cron.allow文件,该文件存在的话,只有该文件中有的工作才能执行
2、在/etc/syslog.conf中打开cron日志文件,在日志文件/var/log/cron.log中打印如下错误:
(SYSTEM) BAD FILE MODE (/etc/crontab)
原因:/etc/crontab文件权限不对,应该为644
四、涉及到的文件或目录:
/usr/sbin/logrotate #日志转储工具,由cron启动
/etc/logrotate.conf #logrotate的主配置文件
/etc/logrotate.d/ #logrotate的配置文件,定义各日志转储规则
/usr/sbin/cron #定期运行任务的工具,守护进程,会运行/etc/cron.{daily,monthly}目录中的脚本,其中logrotate的运行脚本放在/etc/cron.daily目录中
/etc/crontab #cron的主配置文件
/usr/sbin/run-crons #crontab中调用的脚本(同anacron具有类似的功能,即不要求机器24小时运行)
/etc/cron.daily/logrotate #logrotate的运行脚本,每天由cron启动一次
预期结果
1、每天会生成/var/log/test_file的转储文件;
根据转储规则,总共存在3个副本,延迟压缩。
注:自测时可将/etc/cron.daily/logrotate复制到/etc/cron.hourly目录去,1小时后查看/var/log/test_file的转储文件,测试完后必须将/etc/cron.hourly中/logrotate删除,否则会引起混乱。
五、anacron部署
1、anacron配置
(1)编译安装anacron
make && make install
结果:添加文件
可执行文件:/usr/sbin/anacron
日期记录目录:/var/spool/anacron
(2)配置
建立/etc/anacrontab文件,内容来源于anacron源码/README
内容:
# /etc/anacrontab example
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# format: period delay job-identifier command
1 5 cron.daily run-parts /etc/cron.daily
7 10 cron.weekly run-parts /etc/cron.weekly
30 15 cron.monthly run-parts /etc/cron.monthly
2、说明
anacron一般通过cron来调用实现固定周期的任务执行(机器可以不连续开机)