如果不设置轮转,日志会越来越大,可以删除,但更推荐logrotate方式
logrotate 设置步骤:
检查文件所有者
ls -l /data/wwwlogs/
- 首先设置日志目录权限:
sudo chown root:root /data/wwwlogs/*
- 创建 logrotate 配置文件:
sudo nano /etc/logrotate.d/website_logs
- 写入以下配置:
/data/wwwlogs/*.access.log
/data/wwwlogs/*.error.log {
size 500M
missingok
rotate 7
compress
delaycompress
dateext
dateformat -%Y%m%d
copytruncate
create 0644 root root
sharedscripts
postrotate
[ -f /run/nginx/nginx.pid ] && kill -USR1 $(cat /run/nginx/nginx.pid)
endscript
}
或者区别开
# access logs
/data/wwwlogs/*.access.log {
size 500M
missingok
rotate 7
compress
delaycompress
notifempty
dateext
dateformat -%Y%m%d
copytruncate
create 0644 root root
su root root
sharedscripts
postrotate
[ -f /run/nginx/nginx.pid ] && kill -USR1 $(cat /run/nginx/nginx.pid)
endscript
}
# error logs
/data/wwwlogs/*.error.log {
size 20M
missingok
rotate 5
compress
delaycompress
notifempty
dateext
dateformat -%Y%m%d
copytruncate
create 0644 root root
su root root
sharedscripts
postrotate
[ -f /run/nginx/nginx.pid ] && kill -USR1 $(cat /run/nginx/nginx.pid)
endscript
}
- 测试配置:
chmod 644 /etc/logrotate.d/website_logs
logrotate -d /etc/logrotate.d/website_logs
强制执行一次(如果需要)
sudo logrotate -f /etc/logrotate.d/website_logs
或者手动创建一个大文件来测试:
dd if=/dev/zero of=/data/wwwlogs/test.access.log bs=1M count=501
手动压缩已轮转的日志
sudo gzip /data/wwwlogs/*-20250301
- 检查定时任务是否正确设置
systemctl status logrotate.timer
如果未启用,则启用
sudo systemctl enable logrotate.timer
sudo systemctl start logrotate.timer
- 验证定时任务:
# 查看下次执行时间
systemctl list-timers logrotate.timer
- 监控日志大小:
# 查看当前日志大小
du -sh /data/wwwlogs/
# 查看压缩后的日志
ls -lh /data/wwwlogs/*.gz
# 查看各个日志文件大小
du -h /data/wwwlogs/* | sort -hr
配置说明:
- 日志超过 500M 时轮转
- 保留最近7天的日志
- 使用日期作为后缀
- 压缩旧日志(延迟一天)
- 每天凌晨自动检查
- Nginx 日志会自动重新打开
完成后:
- 系统会在每天凌晨自动执行日志轮转
- 超过 500M 的日志会立即轮转
- 旧日志会被压缩
- 超过7天的日志会被自动删除
宝塔面板
检查文件所有者
ls -l /www/wwwlogs/
创建 logrotate 配置文件:
sudo nano /etc/logrotate.d/website_logs
配置如下:
/www/wwwlogs/*[^error].log {
size 500M
missingok
rotate 7
compress
delaycompress
dateext
dateformat -%Y%m%d-%H%M%S
notifempty
copytruncate
create 0644 www root
sharedscripts
postrotate
[ -f /www/server/nginx/logs/nginx.pid ] && kill -USR1 $(cat /www/server/nginx/logs/nginx.pid)
endscript
}
/www/wwwlogs/*.error.log {
size 500M
missingok
rotate 7
compress
delaycompress
dateext
dateformat -%Y%m%d-%H%M%S
notifempty
copytruncate
create 0644 www root
sharedscripts
postrotate
[ -f /www/server/nginx/logs/nginx.pid ] && kill -USR1 $(cat /www/server/nginx/logs/nginx.pid)
endscript
}
说明:
- logrotate 每天凌晨 00:00 自动执行
- 每天凌晨自动检查所有日志
- 如果日志超过 500M 就会轮转
- 上次轮转的日志会被压缩(因为 delaycompress)
- 保留最近7天的日志记录
手动执行轮转
sudo logrotate -f /etc/logrotate.d/website_logs
手动压缩
sudo gzip /www/wwwlogs/*-20250301
查看所有日志大小
du -h /www/wwwlogs/*.log | sort -hr
查看日志大小
du -sh /www/wwwlogs/