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

RobotFramework执行tcpdump命令时出现SubCommandFailure超时错误如何解决

报错复现

RobotFramework执行远程tcpdump命令时触发60s超时,执行命令如下:

execute "tcpdump -i any port ${port} -vvv -n -w /opt/admin/test.20200309.pcap &" on device "${host}"

完整报错信息:

FAIL SubCommandFailure: ('Command execution failed', TimeoutError("timeout occurred: timeout value: 60"))

报错原因
  • RobotFramework常用的远程执行类库(如SSHLibrary、NetmikoLibrary)的execute关键字默认是同步执行逻辑,会等待命令完全执行结束、返回退出码和全部输出后才会结束运行。虽然命令末尾加了&标记后台执行,但多数SSH服务端不会主动将后台运行命令的结束信号返回给客户端,导致execute关键字一直等待直到触发超时阈值。
  • 目标设备执行账号缺少tcpdump运行所需的cap_net_raw、cap_net_admin权限,命令执行时卡在权限校验、密码输入交互环节,无输出也不退出。
  • ${port}等变量未正确完成替换,生成非法tcpdump参数,命令卡在参数错误的交互提示环节无法正常结束。
排查步骤
  • 手动使用RobotFramework所用的同一账号,SSH登录到${host}目标设备,代入变量实际值执行完整tcpdump命令,验证是否能立刻返回到shell提示符,确认是否有权限报错、参数报错等交互信息。
  • 替换tcpdump命令为简单后台命令echo test &执行,排查是否为远程执行类库本身的配置问题导致的超时。
  • 查看远程执行类库的全局配置,确认execute关键字的默认超时配置是否为60s。
解决方案
  • 方案1:改用异步执行类关键字,不需要等待命令执行结束即可返回。例如使用SSHLibrary的Start Command关键字启动tcpdump,后续需要停止抓包时再手动杀进程:
# 后台启动tcpdump不等待返回
Start Command   tcpdump -i any port ${port} -vvv -n -w /opt/admin/test.20200309.pcap    device=${host}
# 执行业务测试逻辑
# ...
# 测试完成后停止tcpdump进程
Execute Command    pkill -f "tcpdump -i any port ${port}"    device=${host}
  • 方案2:给命令添加nohup和输出重定向,强制命令后台运行后立刻返回,修改执行命令为:
execute "nohup tcpdump -i any port ${port} -vvv -n -w /opt/admin/test.20200309.pcap > /dev/null 2>&1 &" on device "${host}"
  • 方案3:解决权限不足问题,使用root账号在目标设备执行以下命令给tcpdump赋必要运行权限:
setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump
  • 方案4:若场景确实需要同步等待tcpdump执行结束再返回,可临时调大execute关键字的超时参数,例如设置timeout=300,该方案仅适合短时间抓包场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 11:06:04