为什么在从Jenkins工作和终端运行时,socat的行为会有所不同?

时间:2015-10-05 11:14:18

标签: linux shell jenkins tcp socat

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

问题
从Jenkins运行时socat行为错误。这项工作是一个自由式的' Jenkins只用一个构建步骤进行项目 - '执行shell':

#!/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. 启动Jenkins工作。

  4. h1 :发送一些数据

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

  5. 可用的操作结果as this gist。如您所见,即使dd报告已发送字节,也没有发生。当我执行完全相同的命令,但是从终端而不是Jenkins在h1上运行socat时,我可以在socat输出和dump中看到零打印文件具有预期的大小。

    这个设置可能看似人为,但我故意在Jenkins脚本中只留下一个socat命令作为一个最小的例子。

    两台主机上的

    socat版本:1.7.2.3 - 默认为Ubuntu 14.04 詹金斯版本:1.607

    与常规交互式shell相比,Jenkins shell环境必须有所不同,但为什么它会中断socat?此外,如果有人知道通过网络建立此类串行连接的任何其他方式,我非常感谢任何建议。

0 个答案:

没有答案