Linux下文件行数超过100行时执行文件轮转的适用命令有哪些?
Linux下按行数阈值实现文件自动轮转的方案
方案1:logrotate(优先推荐,适合自动轮转场景)
logrotate是Linux系统默认预装的日志轮转工具,原生支持按行数阈值触发轮转,无需额外编写监控脚本,适合长期自动运行的场景。
配置示例
你可以在/etc/logrotate.d/目录下新建对应配置文件(比如命名为custom_log),填入以下内容:
/path/to/your/target_file { maxlines 100 rotate 10 copytruncate missingok notifempty compress }
参数说明:
maxlines 100:核心配置,只要文件行数超过100就触发轮转rotate 10:最多保留10个历史轮转文件copytruncate:如果目标文件正在被进程持续写入,用该参数避免文件句柄失效compress:自动压缩历史轮转文件,节省空间missingok:文件不存在也不报错notifempty:文件为空时不轮转
生效与测试
- 执行
logrotate -d /etc/logrotate.d/custom_log可进行空运行测试,验证配置是否符合预期 - 执行
logrotate /etc/logrotate.d/custom_log可手动触发一次轮转 - 系统默认会通过定时任务周期性执行logrotate,无需额外设置即可实现自动监控轮转
方案2:split(适合静态文件/流处理场景)
你已知的split命令本身就支持按行数分割,无需其他参数,适合手动处理已有文件或者管道实时流的场景:
- 处理已有静态文件,按每100行分割:
split -l 100 /path/to/input_file split_output_
生成的文件会以split_output_aa、split_output_ab的命名规则依次排序 - 处理实时程序输出流,按每100行分割存储:
your_running_program | split -l 100 - stream_output_
方案3:rotatelogs(适合实时流连续写入场景)
如果是需要持续接收程序输出、满100行就自动生成新文件,可以用rotatelogs工具:
your_running_program | rotatelogs -l 100 output_%Y%m%d_%H%M%S.log
该命令会自动给新生成的文件带上时间戳,避免文件名冲突。
场景选择建议
- 后台自动监控已有文件的轮转需求,优先选logrotate
- 一次性处理静态文件,选split即可
- 实时程序输出的流分割场景,选rotatelogs或管道+split都可
内容的提问来源于stack exchange,提问作者Angela
相关产品推荐
相关产品推荐

