1. logrotate配置
cd /etc/logrotate.d/
touch nginx
在/etc/logrotate.d/文件夹下创建nginx文件,输入以下内容:
/usr/local/openresty/nginx/logs/*.log {
rotate 4
daily
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
if [ -f /usr/local/openresty/nginx/logs/nginx.pid ]; then
kill -USR1 `cat /usr/local/openresty/nginx/logs/nginx.pid`
fi
endscript
}
输入完成后,可直接调用/usr/sbin/logrotate -f /etc/logrotate.d/nginx
执行日志切割,具体结果详见Openresty日志文件夹下文件。
重启systemctl restart logrotate.service
即完成相应配置。
2. logrotate参数说明
# 配置 # 说明
daily # 指定转储周期为每天
weekly # 指定转储周期为每周
monthly # 指定转储周期为每月
rotate count # 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
compress # 通过gzip 压缩转储以后的日志
nocompress # 不做gzip压缩处理
create mode owner group # 轮转时指定创建新文件的属性,如create 0777 nobody nobody
nocreate # 不建立新的日志文件
delaycompress # 和compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress # 覆盖 delaycompress 选项,转储同时压缩
missingok # 如果日志丢失,不报错继续滚动下一个日志
ifempty # 即使日志文件为空文件也做轮转,这个是logrotate的缺省选项
notifempty # 当日志文件为空时,不进行轮转
mail address # 把转储的日志文件发送到指定的E-mail 地址
olddir directory # 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir # 转储后的日志文件和当前日志文件放在同一个目录下
sharedscripts # 运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置这个,那么每个日志轮转后都会执行一次脚本
prerotate # 在logrotate转储之前需要执行的指令,例如修改文件的属性等动作;必须独立成行
postrotate # 在logrotate转储之后需要执行的指令,例如重新启动 (kill -HUP) 某个服务!必须独立成行
dateext # 使用当期日期作为命名格式
dateformat .%s # 配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合dateext使用,只支持 %Y %m %d %s 这四个参数
size(minsize) log-size # 当日志文件到达指定的大小时才转储,log-size能指定bytes(缺省)及KB (sizek)或MB(sizem),例如 size 100M
3. logrotate.service设置
需要注意,如果不对logratate.service进行配置,会出现以下错误:
需要对以下文件进行如下修改:
vim /lib/systemd/system/logrotate.service
# 在文件的末尾插入如下内容即可
ReadWritePaths=/usr/local/openresty/nginx/logs
改动原因如下所示(详见说明文档):
4. 参考文档
logrotate-succeeds-when-manually-run-as-root-but-fails-with-read-only-file-sys