通过规范命名和脚本解析实现按PID切割日志,配置logrotate使用通配符匹配含PID的日志文件,结合copytruncate与postrotate脚本提取PID并发送USR1信号,确保多实例日志分离且写入不中断。

Linux系统中,日志文件会随着时间不断增长,影响磁盘空间和检索效率。logrotate 是 Linux 下常用的日志管理工具,可以自动对日志进行轮转、压缩、删除等操作。通常 logrotate 按时间或大小切割日志,但有时需要按进程 ID(PID)区分不同实例的日志,比如多个相同服务并行运行时。下面介绍如何配置 logrotate 实现按进程 ID 切割日志的实用方法。
logrotate 通过配置文件定义日志处理规则,一般位于 /etc/logrotate.conf 和 /etc/logrotate.d/ 目录下。核心功能包括:
但 logrotate 本身不直接支持“按 PID 切割”,需要结合命名策略与脚本控制实现。
某些服务可能以多实例方式运行,每个实例使用独立的日志文件,例如:
此时希望每个进程的日志单独切割,避免混淆。实现思路如下:
假设你有多个 myapp 进程,日志路径为 /var/log/myapp/myapp.pid*.log,每个文件名包含其进程 ID。
1. 创建专用配置文件新建 /etc/logrotate.d/myapp-by-pid:
/var/log/myapp/myapp.pid*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
copytruncate
sharedscripts
postrotate
for logfile in "$@"; do
pid=$(echo "$logfile" | grep -o 'pid[0-9]*' | cut -d'p' -f3)
if [ -n "$pid" ] && kill -0 $pid 2>/dev/null; then
kill -USR1 $pid
logger "Sent USR1 to PID $pid for log reopen"
fi
done
endscript
}
测试配置是否正确:
确认旧日志被压缩,新文件创建,且进程继续写入无报错。
基本上就这些。虽然 logrotate 不原生支持按 PID 切割,但通过规范命名 + 通配匹配 + 脚本解析,完全可以实现精细化管理。关键是应用层配合信号处理,或使用 copytruncate 保证写入连续性。
以上就是Linux日志怎么切割_Linux日志使用logrotate按进程ID切割的详细配置方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号