2

У меня есть программа, работающая на Raspbian Stretch, которая разговаривает с мобильным телефоном через USB, используя специальный протокол, реализованный поверх libusb.

Я бы хотел, чтобы программа запускалась при запуске, поэтому я создаю файл службы systemd, но не уверен, какую цель она должна выполнять после:

[Unit]
Description=My Program
After=network.target  <-- ???

[Service]
ExecStart=/home/pi/myprogram
User=root

[Install]
WantedBy=multi-user.target

Этот контент может сделать работу, но что это должно быть после того, как правильно? Как я могу сказать "после того, как USB будет готов"?

Большая часть информации, которую я могу найти в Интернете, касается настройки правил udev, что, как я понимаю, заключается в загрузке модуля ядра при просмотре определенного устройства, что я не думаю, что мне нужно.

Любая помощь приветствуется.

2 ответа2

1

Я не решал это раньше, но кажется, что это может быть хорошо подходит для «активации на основе пути».

Вместо того, чтобы в вашем служебном файле содержалось предложение «After =», вы должны создать файл .path , как описано в man systemd.path.

Найдите подходящий файл в /dev/bus/usb или /sys/bus/usb , присутствие которого указывает на то, что USB работает. Затем пусть systemd отслеживает путь к файлу, используя файл .path который вы создадите. Файл .path активирует ваш файл .service когда файл существует.

0

Я хотел бы создать системное устройство с помощью правила udev. Например: создайте /etc/udev/rules.d/20-usb-bus.rules с:

KERNEL=="usb[1-2]", TAG+="systemd"

При следующей загрузке (или перезагрузке правил udev) у вас будет системный блок:

# systemctl status dev-bus-usb-001-001.device
● dev-bus-usb-001-001.device - 2.0 root hub
...
# systemctl status dev-bus-usb-002-001.device
● dev-bus-usb-002-001.device - 3.0 root hub
...

Теперь вы можете запустить службу после того, как USB-шина готова, добавив:

[Unit]
...
After=dev-bus-usb-001-001.device dev-bus-usb-002-001.device

на ваш системный сервис.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .