1

目标
我想在网络上建立一个双向串行连接,即在不同的主机上有两个字符设备,h1是 Jenkins 从站,h2是由 TCP 连接绑定的。这应该作为 Jenkins 工作的一部分运行。我选择的工具是socat.

问题
socat从 Jenkins 运行时行为错误。这项工作是一个“自由式”詹金斯项目,只有一个构建步骤——“执行外壳”:

#!/bin/bash -e
socat -x -d -d -d tcp:h2:54321 pty,link=/tmp/vmodem1,echo=0,raw,wait-slave

这些步骤每次都会重现问题:

  1. h2 : 运行 TCP 服务器

    socat -x -d -d -d pty,link=/tmp/vmodem1,echo=0,raw tcp4-listen:54321,reuseaddr

  2. h2:开放/tmp/vmodem1阅读:

    cat /tmp/vmodem1 > dump

  3. 开始詹金斯的工作。

  4. h1 : 发送一些数据

    dd if=/dev/zero of=/tmp/vmodem1 bs=1024 count=10

这些操作的结果可用作此要点。如您所见,即使dd报告已发送字节,它也没有发生。当我执行完全相同的命令,但从socat终端而不是 Jenkins 在 h1 上运行时,我可以看到两个socat输出中都打印了零,并且dump文件具有预期的大小。

这个设置可能看起来很做作,但我故意socat在 Jenkins 脚本中只留下一个命令作为一个最小的示例。

socat两台主机上的版本:1.7.2.3- 默认 Ubuntu 14.04。
詹金斯版本:1.607

与常规的交互式 shell 相比,Jenkins shell 环境肯定有一些不同,但为什么会崩溃socat呢?此外,如果有人知道通过网络建立此类串行连接的任何其他方式,我将不胜感激任何建议。

4

0 回答 0