为什么需要重启日志?
- 释放磁盘空间:避免单个日志文件过大占用存储。
- 提升效率:拆分旧日志可加速日志检索和分析。
- 应用配置更新:修改日志配置后需重启生效。
- 合规要求:定期归档日志以满足审计需求。
标准方法:使用 logrotate 工具
logrotate
是Linux内置的日志管理工具,支持自动化轮转。
操作步骤:
- 编辑配置文件
修改或创建配置文件(如针对Nginx):sudo vim /etc/logrotate.d/nginx
添加以下内容(示例):
/var/log/nginx/*.log { daily # 每天轮转 rotate 7 # 保留7份旧日志 compress # 压缩旧日志 delaycompress # 延迟压缩(下次轮转时压缩) missingok # 日志不存在时不报错 notifempty # 空文件不轮转 create 0640 www-data adm # 创建新日志文件的权限 sharedscripts # 所有日志处理完再执行脚本 postrotate systemctl reload nginx # 重启服务以重新打开日志 endscript }
- 手动触发轮转
测试配置并立即执行:sudo logrotate -d /etc/logrotate.d/nginx # 调试(不实际执行) sudo logrotate -f /etc/logrotate.d/nginx # 强制运行
手动重启日志(适用无 logrotate 场景)
若应用不支持自动轮转,可手动操作:
- 重命名当前日志文件
sudo mv /var/log/app/app.log /var/log/app/app.log.old
- 通知应用重新打开日志
- 通过进程信号(如
kill -HUP
):sudo kill -HUP $(pidof app_name) # 向进程发送HUP信号
- 重启服务:
sudo systemctl restart app_name
- 通过进程信号(如
- 验证新日志生成
ls /var/log/app/ # 应出现新app.log
Systemd 系统的日志管理(journalctl)
使用 journald
的系统(如Ubuntu 20.04+、CentOS 7+)可通过以下方式清理日志:
- 查看日志大小
journalctl --disk-usage
- 清理旧日志
sudo journalctl --vacuum-time=7d # 删除7天前的日志 sudo journalctl --vacuum-size=500M # 限制日志最大500MB
- 重启日志服务
sudo systemctl restart systemd-journald
关键注意事项
- 应用兼容性:
确保应用支持HUP
信号(如Nginx、Apache支持,部分Java应用需重启)。 - 避免数据丢失:
- 轮转前确认日志文件未被独占锁定。
- 使用
logrotate
的copytruncate
参数(复制后清空原文件)替代mv
。
- 权限问题:
新日志文件需与原文件权限一致(参考create
指令)。 - 存储监控:
定期检查日志目录:du -sh /var/log/
。
- 首选方案:用
logrotate
自动化管理(安全高效)。 - 临时需求:手动重命名 + 信号通知(需应用兼容)。
- Systemd系统:用
journalctl
控制日志大小。
定期维护日志可提升系统稳定性,建议结合cron
定时执行轮转任务。
引用说明:
- Linux
logrotate
手册:man7.org/linux/man-pages/man8/logrotate.8.html- Systemd
journalctl
文档:www.freedesktop.org/software/systemd/man/journalctl.html- 信号处理机制参考:
man 7 signal
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/9725.html