직렬 회선과 두 개의 이더넷 네트워크 카드를 통해 연결된 고가용성 클러스터(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의 내용에 대한 문서를 찾지 못했기 때문에 줄 끝에 나열된 신호가 케이블 연결/연결 해제의 의미를 의미하는지 확신할 수 없습니다. . 나는 신호의 존재가 주어진 신호가 "지금" 켜져 있다는 것을 의미한다고 가정할 수 있습니다(또는 최근 과거였습니까? 아니면?). 이것시리즈 가이드케이블이 연결될 때 존재하는 추가 신호(CTS 흐름 제어 신호, DSR "통신 준비가 완료되었습니다", CD "모뎀이 다른 신호에 연결되었습니다")가 "입력" 방향에 있음을 나타냅니다. 그러니 반대편에 누군가가 살아 있어야 합니다.
신호의 의미가 Serial HOWTO에 명시된 대로라고 가정하면 CD 신호의 유무에 따라 결정을 내릴 수 있습니다. 하지만 잘 모르겠습니다.
질문은 다음과 같습니다.내 접근 방식이 "올바른"가요? 아니면 제가 모르는 다른 더 나은 옵션이 있나요?
편집하다: 나는 몇 가지 추가 관찰을 하고 동료들과 이야기를 나눴습니다. 라인 끝의 신호 존재 여부는 양쪽 끝의 직렬 포트 활동을 나타내는 좋은 지표임이 밝혀졌습니다.그러나 이는 케이블의 물리적 존재를 나타내지는 않습니다.프로그램이 직렬 포트에 쓸 때마다 나가는 신호(RTS|DTR)가 발생합니다. 상대방이 쓸 때 들어오는 신호(CTS|DSR|CD)가 있습니다. 어느 쪽도 통신하지 않는 경우에는 신호가 전혀 없습니다(이것이 반드시 케이블이 존재하지 않는다는 의미는 아닙니다). 정확한 신호는 다음에 달려 있다는 것을 잊지 마십시오.케이블 배선(저는 "부분 핸드셰이크가 있는 널 모뎀"을 가지고 있습니다).
답변1
RS232에는 "케이블 있음" 표시기가 없습니다. 전송 또는 메타데이터(제어) 신호를 받거나 받지 못하는 것뿐입니다. 그게 여러분이 아는 전부입니다. 들어오는 신호(CTS|DSR|CD)를 수신하면 케이블이 연결되어 있음을 알 수 있습니다. 들어오는 신호가 전혀 수신되지 않으면 케이블 상태가 불확실하며, 추가 하드웨어 솔루션이나 원격 장치와의 일종의 교환 없이는 케이블이 연결되어 있는지 알 수 있는 방법이 없습니다.
일반적인 접근 방식은 일종의 "연결 유지" 전송을 수행하는 것입니다(메타데이터만이라도 - 예를 들어 일시적으로 DTR을 설정하고 CTS를 예상함). 그러나 케이블 양쪽 끝에 있는 소프트웨어가 이러한 유휴 교환을 금지하는 프로토콜 규칙을 사용하는 경우 계속 진행하려면 납땜 인두를 사용하세요.
당신이 시도할 수 있는 것은 파이프를 설정하고, 소프트웨어와 물리적 장치(양쪽 끝) 사이에 데이터를 전달하고, 이를 캡슐화하고, 파이프가 유휴 상태일 때 "연결 확인"을 수행하는 일종의 추가 "악마"입니다.
매우 일반적인 솔루션을 추가하겠습니다. 엔드포인트 장치가 하드웨어 제어를 사용하지 않는 경우 호스트 측 헤더 내부에서 CTS를 DTR로 단축하고 호스트 측에서 "하드웨어 제어"를 사용할 수 있습니다. DTR을 생성하면 자동으로 CTS가 구동되므로 케이블이 있어도 영향을 받지 않는 전송이 가능해집니다. 동시에 케이블이 없으면 시스템은 타임아웃을 생성하거나 케이블이 연결될 때까지 전송을 일시 중지하는 등 이벤트에 적합한 방식으로 CTS 부족에 반응합니다.
답변2
다른 쪽 끝에 연결된 장치가 있음을 알려주는 존재 표시기가 있지만 이는 선택 사항이며 존재 신호 유무에 관계없이 전송이 발생할 수 있습니다.