You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用cat读取GB级大日志文件时报client_loop Broken pipe错误如何解决

错误原因说明

client_loop: send disconnect: Broken pipe 本质是你通过SSH远程登录服务器执行长耗时任务时,SSH会话因长时间无交互被两端的TCP空闲检测规则、或是中间网络设备主动切断,导致前台运行的任务被终止,和你编写的日志处理命令本身没有直接关联。

解决方案

一、优先使用会话脱离方案,彻底规避SSH断连影响

  • 使用nohup把任务放到后台运行,就算SSH连接断开也不会影响任务执行,改写后的命令如下:
nohup bash -c 'cat log-202106*.csv | grep -v -e ".rasd.urban.com" -e "10.10.19.16" | awk -F\" '\''{print $18, $14, $6, $2, $4}'\'' OFS=, | sort -n -T /home/log/Output/all_log | uniq >> output_all.csv' &

运行后会输出后台任务的进程ID,你可以随时用ps -ef | grep 对应进程ID查看任务运行状态,任务运行结束后结果会直接写入output_all.csv,运行日志默认输出到当前目录的nohup.out文件,报错时可以查看该文件定位问题。

  • 也可以使用screen、tmux这类终端复用工具,创建独立的后台会话运行任务,SSH断开后下次登录重新attach对应会话,就能直接看到任务的实时运行状态,不需要重新执行。

二、调整SSH保活配置,避免长会话断开

如果不想使用后台运行的方式,也可以修改SSH配置延长会话存活时间:

  • 如果你本地客户端是Linux/macOS,修改本地~/.ssh/config文件,添加以下配置:
Host *
    ServerAliveInterval 60
    ServerAliveCountMax 5

该配置的作用是每60秒给服务器发送一次心跳包,连续5次没收到响应才判定连接断开,可以规避绝大多数空闲场景下的SSH断连问题。

  • 如果你有服务器的root权限,也可以修改服务端的/etc/ssh/sshd_config文件,添加以下配置:
ClientAliveInterval 60
ClientAliveCountMax 5

修改完成后执行systemctl restart sshd重启SSH服务生效,服务端会主动给客户端发送心跳包保活。

三、优化日志处理命令,缩短运行时间

你当前的命令可以做小幅优化,减少整体运行耗时,从根源上降低断连概率:
你可以把grep和awk的逻辑合并,减少一层管道的IO开销,修改后的命令如下:

awk -F\" '!/\.rasd\.urban\.com/ && !/10\.10\.19\.16/ {print $18, $14, $6, $2, $4}' OFS=, log-202106*.csv | sort -n -T /home/log/Output/all_log | uniq >> output_all.csv

省掉了cat和grep两步的资源开销,处理GB级大文件时速度会有明显提升。

内容的提问来源于stack exchange,提问作者Angeline

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:54:03