Démarrer un service lorsque un périphérique est prêt
Modérateur : Francois
Démarrer un service lorsque un périphérique est prêt
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
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
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
-
- 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
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.
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.
[Pour bien commencer] Pour les nouveaux acquéreurs de Raspberry Pi (index de liens utiles)
Awesome Raspberry Pi
Awesome Raspberry Pi
Re: Démarrer un service lorsque un périphérique est prêt
Bonjour,
Avec la commande 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+
Avec la commande
Code : Tout sélectionner
$ sudo dmesg | grep -i USB
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+
Re: Démarrer un service lorsque un périphérique est prêt
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.
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
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
Re: Démarrer un service lorsque un périphérique est prêt
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+
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+
Re: Démarrer un service lorsque un périphérique est prêt
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
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
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
-
- Raspinaute
- Messages : 1586
- 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
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+
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.
Re: Démarrer un service lorsque un périphérique est prêt
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
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
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
Re: Démarrer un service lorsque un périphérique est prêt
Bonjour,
Bon RTFM
A+
Bon RTFM
A+
Re: Démarrer un service lorsque un périphérique est prêt
C'est ma signature en bas des programmes que j'écris : RTFM
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
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