执行 SSH 命令失败,错误信息:bash: netstat: command not found

在主机 192.168.2.161 上执行命令 sudo bash -c ‘out=$(netstat -ant) && awk ‘"’"’$4~":62888$" { print $4"\t"$6 }’"’"’ <<<"$out"’ 失败,退出码:127,错误信息:bash: netstat: command not found

2025-09-12 13:21:22.115 ERROR 6621 — [manual-subtask-executor16,14792f3b61f73ac8,6903cdfe8cece97d] c.o.ocp.executor.executor.SshExecutor : failed to execute ssh command, errMsg:[SshClient]: failed to execute ssh command: sudo bash -c ‘out=$(netstat -ant) && awk ‘"’"’$4~":62888$" { print $4"\t"$6 }’"’"’ <<<"$out"’, exit code: 127, cause:null

159

160

2025-09-12 13:21:22.116 ERROR 6621 — [manual-subtask-executor16,14792f3b61f73ac8,6903cdfe8cece97d] c.o.o.c.t.e.c.w.subtask.SubtaskExecutor : [SshClient]: failed to execute ssh command: sudo bash -c ‘out=$(netstat -ant) && awk ‘"’"’$4~":62888$" { print $4"\t"$6 }’"’"’ <<<"$out"’, exit code: 127

161

162

com.oceanbase.ocp.executor.exception.SshCommandFailedException: [SshClient]: failed to execute ssh command: sudo bash -c ‘out=$(netstat -ant) && awk ‘"’"’$4~":62888$" { print $4"\t"$6 }’"’"’ <<<"$out"’, exit code: 127

163

at com.oceanbase.ocp.executor.executor.SshExecutor.execute(SshExecutor.java:441)

164

at com.oceanbase.ocp.executor.executor.SshExecutor.checkPortOccupied(SshExecutor.java:285)

165

at com.oceanbase.ocp.service.task.business.host.InstallOcpAgentTask.checkAgentPortsAvailable(InstallOcpAgentTask.java:107)

166

at com.oceanbase.ocp.service.task.business.host.InstallOcpAgentTask.run(InstallOcpAgentTask.java:64)

167

at com.oceanbase.ocp.core.task.runtime.Subtask.retry(Subtask.java:49)

168

at com.oceanbase.ocp.core.task.engine.runner.JavaSubtaskRunner.retry(JavaSubtaskRunner.java:76)

169

at com.oceanbase.ocp.core.task.engine.runner.JavaSubtaskRunner.doRun(JavaSubtaskRunner.java:35)

170

at com.oceanbase.ocp.core.task.engine.runner.JavaSubtaskRunner.run(JavaSubtaskRunner.java:26)

171

at com.oceanbase.ocp.core.task.engine.runner.RunnerFactory.doRun(RunnerFactory.java:76)

172

at com.oceanbase.ocp.core.task.engine.coordinator.worker.subtask.SubtaskExecutor.doRun(SubtaskExecutor.java:212)

173

at com.oceanbase.ocp.core.task.engine.coordinator.worker.subtask.SubtaskExecutor.redirectConsoleOutput(SubtaskExecutor.java:206)

174

at com.oceanbase.ocp.core.task.engine.coordinator.worker.subtask.SubtaskExecutor.lambda$submit$2(SubtaskExecutor.java:137)

175

at java.util.concurrent.FutureTask.run(FutureTask.java:266)

176

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

177

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

178

at java.lang.Thread.run(Thread.java:750)

179

180

181

Set state for subtask: 79, operation:RETRY, state: FAILED

182

netstat: command not found 错误表明当前系统环境中未安装 netstat 命令。这在最小化安装的 Linux 系统(如 Alibaba Cloud Linux、CentOS 等)中非常常见,因为 netstat 并不属于默认安装的核心工具集。

解决方案

方法一:安装 net-tools 软件包(推荐用于传统使用)

netstat 命令包含在 net-tools 包中。您可以使用以下命令安装:

# 对于基于 yum 的系统(如 CentOS, Alibaba Cloud Linux, Anolis OS)
sudo yum install -y net-tools

# 对于基于 dnf 的系统(如 CentOS 8+, RHEL 8+)
sudo dnf install -y net-tools

安装完成后即可正常使用 netstat 命令,例如:

# 查看所有监听端口
netstat -tuln

# 查看特定端口(如 2881)是否在监听
netstat -tuln | grep 2881

注意:OceanBase 数据库节点通常需要开放多个端口(如 2881 用户连接、2882 内部通信、2883 ODP 等),在部署时可通过 netstat 或其现代替代工具验证服务状态。

查看所有 TCP 监听端口

ss -tuln

查找监听在 2881 端口的服务

ss -tuln | grep 2881

显示与 MySQL/OceanBase 兼容端口相关的连接

ss -anp | grep :2881

与 OceanBase 的关联说明

虽然 OceanBase 官方文档未明确列出 net-tools 为强制依赖(部署 FAQ软硬件要求 主要关注内核版本、CPU、内存、文件系统等),但在实际部署过程中,网络诊断工具对于排查以下问题至关重要:

  • OBServer 是否成功绑定并监听 2881/2882 端口
  • ODP(OBProxy)是否正常运行
  • 跨节点通信是否畅通
  • 防火墙或安全组配置是否正确

因此,建议在所有 OceanBase 节点上安装必要的网络工具包或至少熟悉 ss 命令的使用。

666666