logrotate是linux通常会自带的工具,可以自动切割清理日志文件
一、安装(通常无需)
通常系统自带
sudo apt install logrotate
或者
sudo dnf install logrotate
二、具体使用
以nginx日志为例
1.创建脚本文件
vi /etc/logrotate.d/nginx
2.编辑以下内容
注意创建日志的用户组和用户,我这里写的都是root,应该换成你自己的(create 640 root root这一行)
使用通配符 /var/log/nginx/*.log来处理多个文件,如果你的日志在别的目录,这里也要修改
rotate 90 保留90天日志,这行后面不能加#注释
我这里有超过1个目录的nginx需要管理,所以共用一个脚本来处理,只需要并列写就行
postrotate中的判断功能是为了避免多次重新打开日志。
该日志处理不会影响nginx正常运行
/var/log/nginx/*.log /var/log/nginx2/*.log /var/log/nginx3/*.log{daily # 每天切割日志missingok # 如果文件不存在则跳过rotate 90compress # 压缩旧日志文件delaycompress # 延迟压缩,以防止在 Nginx 重新写入前被压缩notifempty # 如果日志为空则不处理su root rootsharedscriptspostrotate# 让 Nginx 重新打开日志文件if [ -f /run/nginx.pid ]; thenkill -USR1 $(cat /run/nginx.pid) >/dev/null 2>&1fiendscript
}
3.手动运行测试
sudo logrotate -f /etc/logrotate.d/nginx
三、logrotate 的执行时间
logrotate 是搭配cron定时任务执行的,所以具体的执行时间在cron
1.logrotate是通过cron.daily执行的
查看
cat /etc/cron.daily/logrotate
2.cron.daily 的执行时间由 /etc/crontab 控制
cat /etc/crontab
我这里每日的在6点25分执行,这里需要考虑你的服务器时间。
如果使用默认的utc时间,那换算成北京时间就是14:25执行,这样就变成了在高峰期执行,需要改时间,如果你的服务器时间就是utc+8,这里就不用改了
/etc/crontab 修改后保存即可,无需重启,会自动生效。