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

BASH脚本调用wscat输出无法导出到文件 Java调用无日志问题咨询

问题排查与解决方案

现有脚本核心问题

  • 输出取值逻辑错误:原脚本中final=$(eval echo "$master")实际是获取wscat命令的文本内容,而非wscat运行后接收的WebSocket返回结果
  • 相对路径异常:Java调用脚本时的工作目录与手动执行时不一致,logfile.log会生成在Java进程的工作目录下,并非你预期的路径,因此会出现“未生成日志”的假象
  • 进程控制逻辑错误:原脚本先sleep 15再启动wscat,启动后直接杀进程,没有预留接收WebSocket返回内容的时间,手动执行能成功属于偶发情况

修正后脚本

#!/bin/bash
# 配置日志绝对路径,避免工作目录不一致问题,可自行修改为实际存储目录
LOG_FILE="/usr/local/ws_script/logfile.log"
# 自动创建日志目录
mkdir -p $(dirname "${LOG_FILE}")

accesskey=""
clientnodeid=""
while getopts a:c: flag
do
    case "${flag}" in
        a) accesskey=${OPTARG};;
        c) clientnodeid=${OPTARG};;     
    esac
done

# 用timeout控制wscat最长运行15秒,-Q 1表示无新数据1秒后自动退出,直接将输出写入日志
timeout 15 wscat -c ws://localhost:8091/ws/callback \
  -H "accessKey:${accesskey}" \
  -H "clientNodeId:${clientnodeid}" \
  -Q 1 > "${LOG_FILE}" 2>&1

# 直接读取日志内容作为请求参数,使用--data-binary避免特殊字符转义问题
curl -X POST --data-binary "@${LOG_FILE}" \
  -k "https://localhost:7460/activate" \
  -H "accept: application/json" \
  -H "accessKey:${accesskey}" \
  -H "clientNodeId:${clientnodeid}" \
  -H "Content-Type: application/json" \
  -H "callbackRequested:true"

exit 0

额外配置说明

  • 给脚本添加执行权限:chmod +x <你的脚本文件名>.sh
  • 确保脚本中配置的日志目录,Java进程的运行用户拥有读写权限
  • 若你使用的wscat版本不支持-Q参数,可直接删除-Q 1配置,timeout会在15秒后自动终止wscat进程,不会出现资源残留

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:45:01