logrotate是Linux系统自带的一个做文件(日志)分割的任务,可以很灵活的对文件做分割任务。由crontab定时执行。
一个典型的logrotate
配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 yangjing:~$ more /etc/logrotate.d/nginx /usr/local/nginx/logs/*.log { notifempty daily dateext compress rotate 60 sharedscripts postrotate /bin/kill -USR1 `/bin/cat /usr/local/nginx/logs/nginx.pid` endscript }
多个日志文件以空格分开,也可以使用通配符进行配置。参数说明:
notifempty: 若日志为空,则不做分割
daily: 每天生成一个日志分割文件
dateext: 分割的日志文件加上日期扩展
compress: 对分割出的日志文件做压缩
rotate: 分割出的日志文件最多保留几份
sharedscripts: 在所有日志文件都轮转(分割)完后统一执行一次脚本
logrotate执行的时间?
logrotate服务是由CRON执行的,所以它的执行时间是由CRON控制,我们可以修改 /etc/crontab
文件来控制logrotate服务执行时间。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 yangjing@sc-007:~/studies/playlist$ more /etc/crontab # /etc/crontab: system-wide crontab # Unlike any other crontab you don't have to run the `crontab' # command to install the new version when you edit this file # and files in /etc/cron.d. These files also have username fields, # that none of the other crontabs do . SHELL=/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin # m h dom mon dow user command 17 * * * * root cd / && run-parts --report /etc/cron.hourly 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
我们可以把 cron.xxxx
命令对应的时间修改为每天的23时59分,修改后的CRON脚本执行命令如下:
1 2 3 4 59 * * * * root cd / && run-parts --report /etc/cron.hourly 59 23 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ) 59 23 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly ) 59 23 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )