logrotate 是一个 Linux系统日志的管理工具。可以对单个日志文件或者某个目录下的文件按时间 / 大小进行切割,压缩操作;指定日志保存数量;还可以在切割之后运行自定义命令。
主流 Linux 发行版上都默认安装有 logrotate 包,如果你的 Linux 系统中找不到 logrotate, 可以使用 apt-get 或 yum 命令来安装。
yum install -y logrotate
下面命令可以查看是否安装了
rpm -ql logrotate
/etc/logrotate.conf是主配置文件,/etc/logrotate.d 文件夹下面是自定义的配置文件
比如文件名为:nginx
vi nginx
/var/log/nginx/error.log {
daily
dateext
dateyesterday
dateformat -%Y-%m-%d
rotate 7
create
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
/var/log/nginx/access.log {
daily
dateext
dateyesterday
dateformat -%Y-%m-%d
rotate 7
create
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
这里对error.log和access.log分别设置拆分。
参数说明如下:
/data/nginx/logs/*.log {
daily # 按天分割
rotate 30 # 保留30个文件
create
sharedscripts # 所有的文件切割之后只执行一次下面脚本,通知nginx重新打开新的日志文件进行后续写入
postrotate
if [ -f /data/nginx/logs/nginx.pid ]; then
kill -USR1 `cat /data/nginx/logs/nginx.pid` # 通过USER1信号通知nginx重新打开日志文件
fi
endscript
}
这样就会每天定时分割日志了
也可以手动执行命令测试一下能否正常分割日志
logrotate -f /etc/logrotate.d/nginx
执行后查看日志文件:
# ll -h /var/log/nginx
-rw-r--r-- 1 nginx root 0 7月 22 14:41 access.log
-rw-r--r-- 1 nginx root 16M 7月 22 14:41 access.log-2024-07-21
-rw-r--r-- 1 nginx root 268M 7月 22 14:41 error.log
-rw-r--r-- 1 nginx root 15M 7月 22 03:32 error.log-2024-07-21
可以看到,在日志文件的基础上复制出了一个带日期的日志文件。