Démarrer un service lorsque un périphérique est prêt

Vous avez réalisé ou vous voulez réaliser un truc impensable avec votre Raspberry Pi ? Cet endroit est pour vous...

Modérateur : Francois

piper
Raspinaute
Messages : 645
Enregistré le : sam. 5 juin 2021 18:57

Démarrer un service lorsque un périphérique est prêt

Message par piper » dim. 5 févr. 2023 00:15

Bonjour,
Petit problème très technique qui dépasse mes compétences (moi je connais plus le soft que le hard)
Voilà, j'ai un périphérique USB branché sur mon PI.
Le matériel est reconnu
Le pilote est installé
Le programme qui exploite se périphérique fonctionne.
C'est un programme écrit en C mais peu importe, là n'est pas la question.

Je souhaite que ce programme démarre automatiquement au boot (et je veux un truc propre : pas de contab ou de rc.local, d'ailleurs j'ai même essayé : c'est pareil,
Ayant l'habitude de systemd, je créé donc un fichier qui décrit le service, je l'active et le lance : tout est ok jusque là

Je reboote et le service n'est pas démarré.
Je regarde pourquoi avec journalctl.

Là, on me dit que le port usb n'était pas prêt lors du démarrage du service

Quelqu'un sait comment utiliser After ou une autre propriété pour que le service ne démarre qu'une fois les ports usb prêts ?
Je sais l'utiliser si un service soft dépend d'un autre mais là ....

J'ai trouvé ceci mais cela ne fonctionne pas :
https://superuser.com/questions/1322777 ... b-is-ready

Ah, pour info, si je fais un truc ignoble dans rc.local (sleep 15 ; lancement du programme) ça fonctionne !
Donc ça prouve bien qu'il faut juste que le programme démarre après un autre

Merci
3 Pi4 : Emby / Samba , Librelec, Android TV
3 Pi3 : Hifiberry /OSMC, Games station, Samba / VPN / HotSpot Wifi
2 Pi2 : RFID, radio reveil (PiReveil)
1 Pi0 : traker GPS et acquisitions
1 Pi0 2W : tests divers
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32

dyox
Raspinaute
Messages : 969
Enregistré le : dim. 28 déc. 2014 15:28
Localisation : Le long de la côte, au dessus du pays des bigoudennes, aïe

Re: Démarrer un service lorsque un périphérique est prêt

Message par dyox » lun. 6 févr. 2023 13:25

Bonjour piper,

Peut-être mettre en place un timer dans le fichier de conf du daemon ou de mettre "ExecStartPre=/bin/sleep 15" ?

Je n'ai pas vu d'autres idées.

J'avais pensé après le dernier service lancé par systemd (systemd-analyze blame) mais chez moi cela est de 2~3s donc pas suffisant.

jelopo
Raspinaute
Messages : 307
Enregistré le : mer. 11 oct. 2017 10:23

Re: Démarrer un service lorsque un périphérique est prêt

Message par jelopo » lun. 6 févr. 2023 15:43

Bonjour,

Avec la commande

Code : Tout sélectionner

$ sudo dmesg | grep -i USB
on devrait visualiser quand le module USB est actif.

Cela peut aider à voir ce qui est démarré juste avant et de mieux gérer le temps d'attente avant démarrage.

Une autre approche à tester serait d'utiliser le principe d'un automount USB. Par contre si ce n'est pas un disque ou une clé USB, il va falloir probablement bidouiller. L'avantage, serait que le matériel USB pourrait être inséré n'importe quand après le boot.

https://unix.stackexchange.com/question ... nux-debian

A+

piper
Raspinaute
Messages : 645
Enregistré le : sam. 5 juin 2021 18:57

Re: Démarrer un service lorsque un périphérique est prêt

Message par piper » lun. 6 févr. 2023 16:11

Bonjour.
Le sleep ??
Déjà essayé : le but, m'assurer que c'est bien parce que le périphérique n'est pas encore prêt.
Ca fonctionne mais je ne pas laisser ça ! Dans le genre moche, j'ai rarement vu pire. C'est juste bon à valider une hypothèse (chose faite immédiatement)

dmesg dit ceci :
[ 0.236440] usbcore: registered new interface driver usbfs (1ère ligne)
---
---
---
---
---
et enfin
[ 32.952226] rc rc0: Realtek RTL2832U reference design as /devices/platform/soc/20980000.usb/usb1/1-1/1-1.2/rc/rc0
[ 32.952675] rc rc0: lirc_dev: driver dvb_usb_rtl28xxu registered at minor = 0, raw IR receiver, no transmitter
[ 32.953079] input: Realtek RTL2832U reference design as /devices/platform/soc/20980000.usb/usb1/1-1/1-1.2/rc/rc0/input0
[ 33.178705] usb 1-1.2: dvb_usb_v2: schedule remote query interval to 200 msecs
[ 33.246038] usb 1-1.2: dvb_usb_v2: 'Realtek RTL2832U reference design' successfully initialized and connected
[ 33.246515] usbcore: registered new interface driver dvb_usb_rtl28xxu
[ 38.608362] dvb_usb_v2: 'Realtek RTL2832U reference design:1-1.2' successfully deinitialized and disconnected (avant dernière ligne)

<<< C'est lui que j'attends
Pb : il pourrait être sur usb 1-1.1 ou usb 1-1.2 ou usb 1-1.3 ou usb 1-1.4 : il y a 4 ports USB
(Bizarre le message "disconnected")

Avec systemd et ses variables de dépendances, il doit bien y avoir un truc possible.
La dépendance avec le soft est documentée mais par rapport au hard : google reste muet.
3 Pi4 : Emby / Samba , Librelec, Android TV
3 Pi3 : Hifiberry /OSMC, Games station, Samba / VPN / HotSpot Wifi
2 Pi2 : RFID, radio reveil (PiReveil)
1 Pi0 : traker GPS et acquisitions
1 Pi0 2W : tests divers
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32

jelopo
Raspinaute
Messages : 307
Enregistré le : mer. 11 oct. 2017 10:23

Re: Démarrer un service lorsque un périphérique est prêt

Message par jelopo » mar. 7 févr. 2023 10:20

Bonjour,

Avez-vous essayer de créer une règle udev ? (Rechercher udev rules)
https://doc.ubuntu-fr.org/udev
https://linuxconfig.org/tutorial-on-how ... s-in-linux

Je crois comprendre que ces règles peuvent juste définir un nouveau périphérique ou bien en plus lancer un programme ?

Pour aller plus loin en passant par systemd, il es possible de démarrer des services avec une règle [Unit] after dans systemd.
avec pour condition une "target" qu'il faut créer...

Qqs pistes à explorer
https://superuser.com/questions/1322777 ... b-is-ready
https://unix.stackexchange.com/question ... md-service

Bonne bidouilles.

A+

piper
Raspinaute
Messages : 645
Enregistré le : sam. 5 juin 2021 18:57

Re: Démarrer un service lorsque un périphérique est prêt

Message par piper » mar. 7 févr. 2023 10:40

Bonjour, merci
Oui, mon idée de départ est d'utiliser systemd puisque c'est le gestionnaire de service de bullseye
En exploitant ses options (After, Target)

Sauf que je n'ai aucune connaissance en udev
Mais grâce à vos liens (je n'avais pas trouvé ceux là), peut-être bien qu'une lecture approfondie me donnera la solution.
En tout cas, ça fait un bon TP à faire à la maison quand le dimanche il faut moche dehors.

Merci
3 Pi4 : Emby / Samba , Librelec, Android TV
3 Pi3 : Hifiberry /OSMC, Games station, Samba / VPN / HotSpot Wifi
2 Pi2 : RFID, radio reveil (PiReveil)
1 Pi0 : traker GPS et acquisitions
1 Pi0 2W : tests divers
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32

destroyedlolo
Raspinaute
Messages : 1585
Enregistré le : dim. 10 mai 2015 18:44
Localisation : Dans la campagne à côté d'Annecy
Contact :

Re: Démarrer un service lorsque un périphérique est prêt

Message par destroyedlolo » mar. 7 févr. 2023 11:14

Coucou,

Je ne doute pas que tu partageras tes trouvailles ;)

J'ai le même problème avec un soft qui fait clignoter les LED "RJ45" en fonction de la charge CPU sur mes bananes : il crashe sur celui sous ARMBian car, visiblement, le device MII/MDIO n'est pas accessible immédiatement après que le réseau est lancé.

A+
  • BananaPI : Gentoo, disque SATA de 2 To
  • Domotique : 1-wire, TéléInfo, Tablette passée sous Gentoo, ESP8266
  • Multimedia par DNLA
  • Et pleins d'idées ... et bien sûr, pas assez de temps.
Un descriptif de ma domotique 100% fait maison.

piper
Raspinaute
Messages : 645
Enregistré le : sam. 5 juin 2021 18:57

Re: Démarrer un service lorsque un périphérique est prêt

Message par piper » mar. 7 févr. 2023 23:13

1ère étape, lire la doc et se faire des expériences car rien de vaut la véritable pratique pour comprendre.
Ensuite, application à mon problème particulier, vérifications
Enfin, explication sur comment j'ai fait
3 Pi4 : Emby / Samba , Librelec, Android TV
3 Pi3 : Hifiberry /OSMC, Games station, Samba / VPN / HotSpot Wifi
2 Pi2 : RFID, radio reveil (PiReveil)
1 Pi0 : traker GPS et acquisitions
1 Pi0 2W : tests divers
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32

jelopo
Raspinaute
Messages : 307
Enregistré le : mer. 11 oct. 2017 10:23

Re: Démarrer un service lorsque un périphérique est prêt

Message par jelopo » jeu. 9 févr. 2023 09:08

Bonjour,

Bon RTFM :geek:

A+

piper
Raspinaute
Messages : 645
Enregistré le : sam. 5 juin 2021 18:57

Re: Démarrer un service lorsque un périphérique est prêt

Message par piper » jeu. 9 févr. 2023 11:10

C'est ma signature en bas des programmes que j'écris : RTFM :mrgreen:
3 Pi4 : Emby / Samba , Librelec, Android TV
3 Pi3 : Hifiberry /OSMC, Games station, Samba / VPN / HotSpot Wifi
2 Pi2 : RFID, radio reveil (PiReveil)
1 Pi0 : traker GPS et acquisitions
1 Pi0 2W : tests divers
5 Arduinos dont 4 nanos et 1 Mega
1 ESP32

Répondre

Retourner vers « Utilisateurs avancés »