# 指定转储周期为每天 daily # 即使日志文件为空文件也做轮转,这个是 logrotate 的缺省选项。 ifempty # 当日志文件为空时,不进行轮转 notifempty # 当日志文件大于指定大小后就轮转,支持的单位: k,K,m,M size 5M # 用于还在打开中的日志文件,把当前日志备份并截断; # 是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据。 copytruncate # 运行 postrotate 脚本,作用是在所有日志都轮转后统一执行一次脚本。 # 如果没有配置这个,那么每个日志轮转后都会执行一次脚本 sharedscripts # 在 logrotate 转储之后需要执行的指令,例如重新启动 (kill -HUP) 某个服务!必须独立成行 postrotate # 在 logrotate 转储之前需要执行的指令,例如修改文件的属性等动作;必须独立成行 prerotate # 将轮转的日志保存到指定路径下,默认保存在日志文件同一目录下 olddir /data/logs/ # 如果产生日志的进程的运行用户不是 root,需要指定相关的用户和组,否则会报错:because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation. ,如果只配置了用户,未配置组,会报错:error: error switching euid to 1003 and egid to -1: Invalid argument su appuser appgroup
配置示例
nginx 日志切割配置文件示例,创建 /etc/logrotate.d/nginx:
/etc/logrotate.d/nginx
/logs/nginx/access/*.log /logs/bginx/error/*.log { daily compress rotate 7 missingok notifempty dateext sharedscripts postrotate if [ -f /run/nginx.pid ]; then kill -USR1 `cat /run/nginx.pid` fi endscript }