在 Linux 上使用 Systemd 启动网络摄像头应用程序

在 Linux 上使用 Systemd 启动网络摄像头应用程序

我有一个简单的应用程序,它使用名为“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

相关内容