В служебном файле systemd как мне сказать "после того, как USB готов"?

625
Nick Lee

У меня есть программа, работающая на 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

1 ответ на вопрос

1
Mark Stosberg

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

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

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

Спасибо. В итоге я отслеживаю путь `/ dev / bus / usb / 001`. Вот где USB-шина Raspberry Pi. Для всех, кто интересуется конкретным примером, [здесь] (https://unix.stackexchange.com/a/203661/186939) - еще один хороший ответ. Nick Lee 5 лет назад 0