目标:
我想通过网络建立双向串行连接,即在不同的主机上有两个字符设备, 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
这些步骤每次都会重现问题:
h2 :运行TCP服务器
socat -x -d -d -d pty,link=/tmp/vmodem1,echo=0,raw tcp4-listen:54321,reuseaddr
h2 :打开/tmp/vmodem1
阅读:
cat /tmp/vmodem1 > dump
启动Jenkins工作。
h1 :发送一些数据
dd if=/dev/zero of=/tmp/vmodem1 bs=1024 count=10
可用的操作结果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
?此外,如果有人知道通过网络建立此类串行连接的任何其他方式,我非常感谢任何建议。