No arquivo de serviço do systemd, como digo “depois que o USB estiver pronto”?

2

Eu tenho um programa em execução no Raspbian Stretch, conversando com um telefone celular via USB, usando um protocolo especializado implementado sobre a libusb.

Eu gostaria que o programa fosse executado na inicialização, então eu criei um arquivo de serviço systemd, mas não tenho certeza de qual destino ele deve executar depois:

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

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

[Install]
WantedBy=multi-user.target

Este conteúdo pode fazer o trabalho, mas o que deve ser depois de corretamente? Como eu poderia dizer "depois que o USB estiver pronto"?

A maioria das informações que eu posso encontrar na web é sobre como configurar as regras do udev, que eu entendo é carregar um módulo do kernel para ver um determinado dispositivo, o que eu não acho que seja o que eu quero.

Qualquer ajuda é apreciada.

    
por Nick Lee 15.05.2018 / 09:05

1 resposta

1

Eu não resolvi isso antes, mas parece que pode ser uma boa opção para "ativação baseada em caminho".

Em vez de ter uma cláusula "After=" em seu arquivo de serviço, você criaria um arquivo .path , conforme descrito em man systemd.path .

Encontre um arquivo adequado em /dev/bus/usb ou /sys/bus/usb , cuja presença indica que "USB está ativo". Então, tenha systemd monitorando o caminho do arquivo usando o arquivo .path que você criará. O arquivo .path , em seguida, ativaria seu arquivo .service quando o arquivo existir.

    
por 15.05.2018 / 15:34