Назад | Перейти на главную страницу

Запустите приложение веб-камеры с помощью Systemd в Linux

У меня есть простое приложение, которое транслирует видео через веб-камеру под названием «стример». Я бы хотел запустить "streamer", когда мое устройство Linux загрузится с systemd.

Затем у меня есть следующий служебный файл 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

Как я могу заставить это работать с моей веб-камерой?

Мне пришлось добавить правило 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