问题描述
我需要一些帮助,因为我是 systemd 和 udev 的新手。 当 VCP(即 USB 设备)存在时,我需要通过 TCP 将虚拟 com 端口 (VCP) 转发到服务器,在互联网上查看我找到了这个解决方案:
我做了它并且在一切正常时让它工作,但我的问题是它在失败时很强大。 所以为了让它工作,我添加了那些 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 (将#修改为@)