未分类

Linux下对大文件(日志)进行分割

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 )
分享到