我有一个简单的应用程序,它使用名为“streamer”的网络摄像头传输视频。我希望在我的 Linux 设备使用 systemd 启动时启动“streamer”。
接下来,我有以下 systemd 服务文件 /lib/systemd/system/streamer.service
[Unit]
Description=Webcam Service
[Service]
ExecStart=/usr/bin/streamer
[Install]
WantedBy=multi-user.target
当我手动运行它时,它的工作原理如下:
systemctl start streamer
但是,当我启用脚本并重新启动时,它不会自动启动:
systemctl enable streamer
reboot
我怎样才能让它与我的网络摄像头配合使用?
答案1
我必须添加一个 udev 规则来检测摄像头/etc/udev/rules.d/webcam.rules
:
KERNEL=="video0", SYMLINK="video0", TAG+="systemd"
KERNEL=="video1", SYMLINK="video1", TAG+="systemd"
然后我对我的服务文件做了以下更改/lib/systemd/system/streamer.service
:
[Unit]
Description=Webcam Service
BindsTo=dev-video1.device
After=dev-video1.device
[Service]
ExecStart=/usr/bin/streamer
其原因如下systemd.unit
:
https://www.freedesktop.org/software/systemd/man/systemd.unit.html#BindsTo=
当与 结合使用
After=
于同一单位时, 的行为BindsTo=
会更加强大。在这种情况下,严格绑定到的单位必须处于活动状态,该单位才会处于活动状态。
[Install]
WantedBy=multi-user.target