Udev 和 systemd 用于可靠的 socat 串行到 TCP 重定向?

问题描述

我需要一些帮助,因为我是 systemd 和 udev 的新手。 当 VCP(即 USB 设备)存在时,我需要通过 TCP 将虚拟 com 端口 (VCP) 转发到服务器,在互联网上查看我找到了这个解决方案:

  • 设置触发 systemd 服务的 udev 规则
  • 设置一个运行 socat 的 systemd 服务

我做了它并且在一切正常时让它工作,但我的问题是它在失败时很强大。 所以为了让它工作,我添加了那些 udev 规则来在 VCP 出现和消失时触发告诉 systemd:

ATTRS{idProduct}=="XXXX",ATTRS{idvendor}=="YYYY",ACTION=="add",SYMLINK+="myserial",TAG+="systemd",ENV{SYstemD_WANTS}="socat.service"                                                                                            
ATTRS{idProduct}=="XXXX",ACTION=="remove",TAG+="systemd" 

这是 systemd 服务:

[Unit]                                                                                                                
Description=Socat service to forward serial port                                                                      
BindsTo=dev-myserial.device                                                                                         
After=dev-myserial.device                                                                                                                                                                                            
                                                                                                                      
[Service]                                                                                                             
Type=simple                                                                                                           
ExecStart=/usr/bin/socat FILE:/dev/myserial,b115200,raw TCP:www.www.www.www:zzz                                         
Restart=on-failure                                                                                                    
RestartSec=10                                                                                                         
                                                                                                                      
[Install]                                                                                                             
WantedBy=dev-myserial.device

这在服务器死机时起作用(为了测试我手动杀死它)并且在 10 秒后有一次新的尝试因“连接被拒绝”错误而失败(用 journalctl 看到它)。 但是,如果我断开设备连接,则 myserial 端口的 journalctl 尝试和错误将变为“没有此类文件或目录”。 看起来移除设备没有效果

添加第二条规则后,使用 systemctl status dev-myserial.device 检查设备变为非活动状态。

我认为是由于冲突:已经设置了重启后服务停止了。 是这个问题吗?

知道如何解决吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...