通过创建systemd服务实现系统启动时自动切割日志。1. 创建logrotate-boot.service文件,设置在local-fs.target后执行logrotate -f /etc/logrotate.conf;2. 启用该服务使每次启动运行一次logrotate;3. 配置/etc/logrotate.d/myapp等策略文件,使用copytruncate等方式处理无法重载的服务;4. 重启验证日志是否被成功切割,并检查journalctl日志记录。此方法将logrotate从时间驱动扩展为事件驱动,适用于排查启动问题,但需注意copytruncate的丢日志风险及合理组合时间或大小条件避免频繁切割。

Linux系统中,日志文件会随着时间不断增长,影响系统性能和磁盘使用。logrotate是Linux自带的日志管理工具,通常按天、周或大小进行切割,但有时我们希望在系统每次启动时也触发日志切割——比如调试开机服务或排查启动问题。下面介绍如何配置logrotate实现按系统启动自动切割日志。
logrotate默认由cron定时执行,一般每天运行一次。它本身不直接支持“按启动切割”,但我们可以通过init系统(如systemd)在每次系统启动时主动调用logrotate,达到按启动切割的目的。
核心思路是:在系统启动完成后,立即执行一次logrotate,确保本次启动前的日志被归档,新启动产生的日志写入新的文件。
以systemd为例,创建一个unit文件,在系统启动后运行logrotate:
1. 创建systemd service文件:
/etc/systemd/system/logrotate-boot.service
[Unit] Description=Logrotate on boot After=local-fs.target <p>[Service] Type=oneshot ExecStart=/usr/sbin/logrotate -f /etc/logrotate.conf RemainAfterExit=yes</p><p>[Install] WantedBy=multi-user.target</p>
2. 启用该服务:
运行以下命令启用开机执行:
sudo systemctl daemon-reexec sudo systemctl enable logrotate-boot.service
这样每次系统启动时,logrotate都会强制执行一次配置文件中的规则,完成日志切割。
编辑对应日志的logrotate配置,例如为自定义应用日志设置启动级切割:
/etc/logrotate.d/myapp
/var/log/myapp.log {
missingok
notifempty
copytruncate
daily
rotate 7
compress
postrotate
/bin/kill -USR1 `cat /var/run/syslogd.pid 2>/dev/null` 2>/dev/null || true
endscript
}
说明:
重启系统后,检查日志文件是否被成功切割:
ls /var/log/myapp.log*
查看logrotate日志(通常在/var/lib/logrotate/status 或通过journalctl)确认执行记录:
sudo journalctl -u logrotate-boot.service
注意:
create + 信号方式。基本上就这些。通过systemd服务触发logrotate,可以轻松实现“按系统启动”切割日志的需求,特别适合用于诊断启动过程中的服务行为。关键是把logrotate从纯时间驱动扩展到事件驱动,提升日志管理灵活性。
以上就是Linux日志怎么切割_Linux日志利用logrotate按系统启动切割的实用方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号