在 Debian(以及大多数 Linux 发行版)中,日志分割(轮转)通常由 logrotate 负责。下面从常见场景给你一个完整说明。
logrotate/etc/logrotate.conf/etc/logrotate.d/*| 日志类型 | 服务 | 轮转方式 |
|---|---|---|
/var/log/syslog |
rsyslog | logrotate |
/var/log/auth.log |
rsyslog | logrotate |
journalctl |
systemd-journald | journald 自带 |
ls /etc/logrotate.d/
常见文件:
rsyslogaptdpkgnginxmysql查看 rsyslog:
cat /etc/logrotate.d/rsyslog
示例(rsyslog):
/var/log/syslog
{
rotate 7
daily
missingok
notifempty
delaycompress
compress
postrotate
/usr/lib/rsyslog/rsyslog-rotate 2>/dev/null || true
endscript
}
| 参数 | 含义 |
|---|---|
rotate 7 |
保留 7 个旧日志 |
daily |
每天轮转 |
weekly |
每周 |
size 100M |
超过 100M 才轮转 |
compress |
gzip 压缩 |
missingok |
日志不存在不报错 |
notifempty |
空日志不轮转 |
postrotate |
轮转后执行命令(如重载服务) |
logrotate -f /etc/logrotate.conf
logrotate -d /etc/logrotate.conf
journalctl --disk-usage
编辑:
sudo nano /etc/systemd/journald.conf
常用配置:
SystemMaxUse=200M
SystemMaxFileSize=50M
MaxRetentionSec=7day
重启:
sudo systemctl restart systemd-journald
假设你有 /var/log/myapp.log:
sudo nano /etc/logrotate.d/myapp
内容:
/var/log/myapp.log {
daily
rotate 14
size 50M
compress
missingok
notifempty
create 0640 www-data www-data
postrotate
systemctl reload myapp
endscript
}
systemctl status cron
/etc/cron.daily/logrotate
postrotate✅ Debian 日志分割 主要靠 logrotate
✅ 系统日志、应用日志都适用
✅ journal 日志用 journald.conf 控制
✅ 可通过 daily / size / rotate 灵活控制
如果你愿意,可以告诉我:
我可以帮你直接写一份可用的 logrotate 配置。