我有一个通过串行线和两个以太网NIC连接的高可用性群集(Heartbeat)。我想设置一个能够识别断开的串行线的监视脚本(基本上,在SO上回答了相同的问题,但是我对这样的一般回答不满意)。
我不能简单地打开串行设备并自己读取数据,因为串行线是由Heartbeat打开的。
因此,我开始寻找一些间接的线索。到目前为止,我发现的唯一区别是的内容/proc/tty/driver/serial
。连接后的样子如下:
# cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:2722759 rx:2718165 brk:1 RTS|CTS|DTR|DSR|CD
当断开连接时:
# cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:2725233 rx:2720703 brk:1 RTS|DTR
我没有足够的信心去确定行尾列出的信号具有已连接/已断开电缆的含义,因为我没有找到有关/ proc / tty / driver / serial内容的任何文档。我只能假设信号的存在意味着给定的信号是“现在”(或者是最近的过去?或?)。所述串行HOWTO说,当电缆被连接(CTS流量控制信号,DSR“我准备好进行通信”,CD“调制解调器连接到另一个”)附加信号呈现都在“输入”的方向。因此,另一端必须有人在世。
假设信号的含义如串行HOWTO中所述,我可以根据CD信号的存在来做出决定。但是我不确定。
因此,问题是:我的方法是“正确的”,还是我有不知道的更好的选择?
编辑: 我做了一些其他的观察,并与我的同事进行了交谈。事实证明,在线路的末端是否存在信号,可以很好地指示两端的串行端口活动。但是,这并不表示电缆的物理存在。每当有程序写入串行端口时,就会出现输出信号(RTS | DTR)。当另一侧正在写入时,会出现输入信号(CTS | DSR | CD)。当双方都没有通信时,根本就没有信号(这不一定意味着没有电缆)。不要忘记确切的信号取决于电缆的布线(我有“带有部分握手功能的空调制解调器”)。