Phi*_*ipp 12 linux usb boot udev systemd
在我的Linux(BeagleBone Black上的Angstrom发行版)上,我有一个USB加密狗,它作为一个串口提供,默认情况下可用作 /dev/ttyUSB0
我想启动一个守护进程,它将连接到串行端口并使其可用作套接字.我有这个USB到套接字桥的代码,它可以在手动启动时工作.
我想让它在系统启动时自动启动,假设USB加密狗已插入.我应该怎么做?
到目前为止的尝试:
systemd:我创造了条件systemd服务After: remote-fs.target和After:syslog.target,但(似乎)的USB加密狗是不准备在这一点上和守护程序的启动失败.
是否有其他systemd targets或services条件,以便只有当udev完成安装设备并且网络准备好后才启动守护进程?
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)
由于我进一步评论中的链接似乎解决了这个问题,因此以下是在插入某个 USB 设备时使用 udev 启动守护进程的解决方案:
在 udev 事件(设备热插拔)上启动长时间运行的 systemd 服务的正确(-ish)方法