Linux:在连接的USB串行加密狗上启动守护程序

Phi*_*ipp 12 linux usb boot udev systemd

在我的Linux(BeagleBone Black上的Angstrom发行版)上,我有一个USB加密狗,它作为一个串口提供,默认情况下可用作 /dev/ttyUSB0

我想启动一个守护进程,它将连接到串行端口并使其可用作套接字.我有这个USB到套接字桥的代码,它可以在手动启动时工作.

我想让它在系统启动时自动启动,假设USB加密狗已插入.我应该怎么做?

到目前为止的尝试:

  1. systemd:我创造了条件systemd服务After: remote-fs.targetAfter:syslog.target,但(似乎)的USB加密狗是不准备在这一点上和守护程序的启动失败.

    是否有其他systemd targetsservices条件,以便只有当udev完成安装设备并且网络准备好后才启动守护进程?

  2. udev:我创建了一个udev规则

    KERNEL =="ttyUSB?",RUN + ="/ path/to/daemon.sh"

    哪个成功执行.但守护进程(在该脚本中以"&"作为后台进程启动)似乎不会执行.从udev规则分叉长时间运行的进程似乎也不赞成.

这样做的正确方法是什么?

Phi*_*ipp 15

创建一个类似的udev规则

# cat /etc/udev/rules.d/95-serialdaemon.rules
KERNEL=="ttyUSB0", ENV{SYSTEMD_WANTS}="serialdaemon.service"
Run Code Online (Sandbox Code Playgroud)

创建一个类似于systemd的服务

# cat /lib/systemd/system/serialdaemon.service
[Unit]
Description=USB serial to socket bridge
After=remote-fs.target
After=syslog.target

[Service]
ExecStart=/mnt/serialdaemon.sh
Run Code Online (Sandbox Code Playgroud)

创建可执行文件

# cat /mnt/serialdaemon.sh
#!/bin/sh
date +%F-%T >> /var/log/serialdaemon.log
/usr/local/serialdaemon/serialdaemon -serial /dev/ttyUSB0 -port 15789 -baud 38400 >> /var/log/serialdaemon.log 2>&1
date +%F-%T >> /var/log/serialdaemon.log
Run Code Online (Sandbox Code Playgroud)


mor*_*n.c 5

由于我进一步评论中的链接似乎解决了这个问题,因此以下是在插入某个 USB 设备时使用 udev 启动守护进程的解决方案:

在 udev 事件(设备热插拔)上启动长时间运行的 systemd 服务的正确(-ish)方法

  • 接受您的答案,以便您获得积分。我的只是供(我自己的)参考。 (2认同)