目标:
我想在网络上建立一个双向串行连接,即在不同的主机上有两个字符设备,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
这些步骤每次都会重现问题:
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
开始詹金斯的工作。
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
呢?此外,如果有人知道通过网络建立此类串行连接的任何其他方式,我将不胜感激任何建议。