在Linux系统中,日志轮转(Log Rotation)是维护系统稳定性和存储空间管理的重要任务。以下是结合Systemd和Crontab实现日志轮转的详细方法和步骤:
Systemd内置日志服务journald
,可通过以下配置实现自动轮转:
sudo vim /etc/systemd/journald.conf
修改或添加以下参数:
[Journal]
# 限制单个日志文件大小
SystemMaxUse=100M
# 最大保存日志大小
RuntimeMaxUse=50M
# 最大保存日志文件数量
MaxRetentionSec=1month
# 启用压缩
Compress=yes
sudo systemctl restart systemd-journald
journalctl --rotate
journalctl --disk-usage
适用于非Systemd管理的日志文件(如Nginx/Apache日志)。
sudo apt-get install logrotate # Debian/Ubuntu
sudo yum install logrotate # CentOS/RHEL
sudo vim /etc/logrotate.d/myapp
示例配置(以Nginx日志为例):
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
systemctl reload nginx
endscript
}
sudo crontab -e
添加每日执行的计划任务:
0 0 * * * /usr/sbin/logrotate -f /etc/logrotate.conf
logrotate -d /etc/logrotate.d/myapp # 干跑测试
logrotate -f /etc/logrotate.d/myapp # 强制执行
适用于同时管理journald
日志和自定义日志文件。
修改/etc/systemd/journald.conf
:
[Journal]
Storage=persistent
ForwardToSyslog=yes
sudo vim /etc/logrotate.d/systemd-journal
内容示例:
/var/log/journal/*/*.journal {
weekly
rotate 4
size 100M
compress
delaycompress
postrotate
systemctl kill --kill-who=main --signal=SIGUSR1 systemd-journald
endscript
}
chmod 640
)。df -h
或Prometheus)。rotate
和MaxRetentionSec
。systemctl reload nginx
)。cat /var/lib/logrotate/status
journalctl -u systemd-journald -b
logrotate -vf /etc/logrotate.conf
通过上述方法,可以灵活实现Linux系统中各类日志的自动化轮转管理。