シリアル回線と2つのイーサネットNICを介して接続された高可用性クラスター(Heartbeat)があります。切断されたシリアル回線を認識できる監視スクリプトをセットアップしたいと思います(基本的に同じ質問がSOで回答されましたが、そのような一般的な回答には満足していません)。
シリアルラインはハートビートによって開かれているため、シリアルデバイスを開いて自分でデータを読み取ることはできません。
だから私はいくつかの間接的な手がかりを探し始めました。これまでに見つけた唯一の違いは、の内容です/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)。どちらの側も通信しない場合、信号はまったくありません(ケーブルが存在しないことを必ずしも意味しません)。正確な信号はケーブルの配線に依存することを忘れないでください(「部分的なハンドシェイクを備えたヌルモデム」を使用しています)。