ser2net + socat + 監督。 socat 終了しました

ser2net + socat + 監督。 socat 終了しました

リモートデバイスをゲートウェイとして使用してSMSを送信する小さなアプリを開発しています。

これらのデバイスはVPNで接続されていますが、重要ではありません。

SMSゲートウェイには物理的にシリアルポートがあります/dev/AMA0。私はser2netインターネットを介してシリアルポートを共有するためにSMSゲートウェイに使用しており、socatVPSで仮想シリアルポートを作成し、共有ポートを「受信」するために使用しています。

私の意見は次のとおりです。

SMSゲートウェイ:

cat /etc/ser2net.conf 
3333:raw:0:/dev/ttyAMA0:9600,8DATABITS,NONE,1STOPBIT

VPS:

socat pty,link=/dev/tty_remote_serial,waitslave tcp:10.8.0.2:3333

SMSデバイスを制御するために使用しますgammu。 VPSにログインしてこのコマンドを実行すると、次のようになります。

gammu identify
Device               : /dev/tty_remote_rpi_serial
Manufacturer         : SIMCOM_Ltd
Model                : unknown (SIMCOM_SIM800L)
Firmware             : Revision:1308B08SIM800L16
IMEI                 : 867XXXXXXXXXXX23
SIM IMSI             : XXXXXXXXXX491925

そしてそれは完璧です。リモートシリアルポートが利用可能で、すべてが完璧に動作します。問題は再び走る時であるgammu identify。シャットダウンのためデバイスが/dev/tty_remote_rpi_serial存在しませんsocatsocatサービスを再起動すると、すべてがうまく機能します。socat閉じた接続(mincomから)または実行されたコマンド()の両方を再起動する必要がありますgammu identify

解雇を防ぐ方法はありますかsocat

2016/01/06 04:50:04 socat[4233] N read(5, 0x16ea680, 8192): Input/output error (probably PTY closed)
2016/01/06 04:50:04 socat[4233] N socket 1 (fd 5) is at EOF
2016/01/06 04:50:04 socat[4233] I shutdown(6, 1)
2016/01/06 04:50:04 socat[4233] D shutdown()  -> 0
2016/01/06 04:50:04 socat[4233] D data loop: sock1->eof=2, sock2->eof=0, closing=1, wasaction=1, total_to={0.000000}
2016/01/06 04:50:04 socat[4233] D select(7, &0x40, &0x0, &0x0, &999.000000)
2016/01/06 04:50:04 socat[4233] D select -> (, 0x40, 0x0, 0x0, &998.974365), 1
2016/01/06 04:50:04 socat[4233] D read(6, 0x16ea680, 8192)
2016/01/06 04:50:04 socat[4233] D read -> 0
2016/01/06 04:50:04 socat[4233] N socket 1 (fd 5) is at EOF
2016/01/06 04:50:04 socat[4233] I shutdown(6, 1)
2016/01/06 04:50:04 socat[4233] D shutdown()  -> -1
2016/01/06 04:50:04 socat[4233] I shutdown(6, 1): Transport endpoint is not connected
2016/01/06 04:50:04 socat[4233] N socket 2 (fd 6) is at EOF
2016/01/06 04:50:04 socat[4233] I close(5)
2016/01/06 04:50:04 socat[4233] D close()  -> 0
2016/01/06 04:50:04 socat[4233] D unlink("/dev/tty_remote_rpi_serial")
2016/01/06 04:50:04 socat[4233] D unlink()  -> 0
2016/01/06 04:50:04 socat[4233] I shutdown(6, 2)
2016/01/06 04:50:04 socat[4233] D shutdown()  -> -1
2016/01/06 04:50:04 socat[4233] I shutdown(6, 2): Transport endpoint is not connected
2016/01/06 04:50:04 socat[4233] N exiting with status 0
2016/01/06 04:50:04 socat[4233] D exit(0)
2016/01/06 04:50:04 socat[4233] D starting xioexit()
2016/01/06 04:50:04 socat[4233] D finished xioexit()

答え1

使用

while sleep 1; do
    socat pty,link=/dev/tty_remote_serial,waitslave tcp:10.8.0.2:3333;
done 

関連情報