在 Debian 系统中,“轮转日志”通常是指使用 logrotate 工具对系统或应用日志进行自动切割、压缩、删除和邮件通知等管理。下面按常见场景说明。
Debian 默认已安装并启用 logrotate:
which logrotate
# 通常输出:/usr/sbin/logrotate
配置文件位置:
/etc/logrotate.conf/etc/logrotate.d/(推荐在这里配置应用日志)系统一般通过 cron 或 systemd timer 每天执行一次:
ls -l /etc/cron.daily/logrotate
systemctl status logrotate.timer
创建配置文件:
sudo nano /etc/logrotate.d/myapp
示例内容:
/var/log/myapp/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
systemctl reload myapp > /dev/null 2>&1 || true
endscript
}
daily:每天轮转rotate 7:保留 7 个旧日志compress:压缩旧日志delaycompress:延迟一次压缩notifempty:空日志不轮转create:创建新日志文件及权限postrotate:轮转后执行命令(如重载服务)sudo logrotate -d /etc/logrotate.d/myapp
sudo logrotate -f /etc/logrotate.d/myapp
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi
endscript
postrotate
invoke-rc.d nginx rotate >/dev/null 2>&1 || true
endscript
}
如果程序支持 USR1 信号:
/var/log/myservice.log {
size 100M
rotate 5
compress
copytruncate
}
copytruncate 适合不能重载日志的程序。
不想按时间,而是按大小:
/var/log/app.log {
size 50M
rotate 10
compress
copytruncate
}
ls -lh /var/log/
# 例如:
# app.log
# app.log.1.gz
# app.log.2.gz
notifempty-d 调试确保:
create 权限正确如果你有具体日志路径或服务(如 Docker、Java、rsyslog、自定义脚本),我可以给你更精确的轮转配置。