CentOS 7 系统默认自带 logrotate。

logrotate 可以自动对日志进行轮转切割、压缩以及删除旧的日志文件。配置完后,logrotate基于crond自动化运作,无需人为干预。

vim /etc/logrotate.d/nginx
/var/log/nginx/*log {

    create 0664 root root
    # daily
    # 指定转储周期为每周
    weekly
    dateext
    dateformat -%Y%m%d%H.log

    # 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
    olddir /var/log/nginx/logrotate

    rotate 106
    missingok
    notifempty

    compress
    # 以bz2压缩
    compresscmd /usr/bin/bzip2
    # compressoptions -z
    compressext .bz2
    delaycompress

    # 在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行
    sharedscripts
    postrotate
        # 不是中止Nginx的进程,而是传递给它信号重新生成日志,如果nginx没启动不做操作
        /bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
    endscript

}
$ logrotate --help            
用法: logrotate [OPTION...] <configfile>
  -d, --debug               Don't do anything, just test (implies -v)
  -f, --force               Force file rotation
  -m, --mail=command        Command to send mail (instead of `/bin/mail')
  -s, --state=statefile     Path of state file
  -v, --verbose             Display messages during rotation
  -l, --log=STRING          Log file
  --version                 Display version information

Help options:
  -?, --help                Show this help message
  --usage                   Display brief usage message