如何在启动服务之前等待 /dev/video0

gal*_*ets 12 udev systemd

我可以编写依赖于挂载的单元文件,因为我可以列出它们然后添加到Requires=xxx,例如:

# systemctl list-units | grep data
mount-data.service    loaded active exited    Manage the data partition
Run Code Online (Sandbox Code Playgroud)

我想要做的是在网络摄像头插入设备时启动服务。systemctl list-units | grep video0什么都不返回。有人可以用简单的术语解释我,我该怎么做才能确保做到这一点?我不希望发生的是启动服务的时候/dev/video0/dev/video1等出现。

我从这篇文章中得到了一个线索,我需要写一个 udev 规则,但我不知道这里到底需要做什么。帮助?

gal*_*ets 12

我想通了。首先,将以下行添加到 udev 规则文件夹中的一个文件中,我用过/lib/udev/rules.d/99-systemd.rules

KERNEL=="video0", SYMLINK="video0", TAG+="systemd"
KERNEL=="video1", SYMLINK="video1", TAG+="systemd"
Run Code Online (Sandbox Code Playgroud)

然后您可以绑定到服务单元文件中的视频设备:

[Unit]
BindsTo=dev-video0.device
After=dev-video0.device
Run Code Online (Sandbox Code Playgroud)