Bonjour,
Voici ma problématique.
J'utilise la librairie pigpio pour gérer les entrées sorties de ma carte.
Tout va bien, sans aucun soucis.
Je lance le daemon "sudo pigpiod" à chaque démarrage de la carte via la console, puis lance mes différents nœud ROS. (ROS ou pas ma problématique reste existante)
J'aimerais que ce démon soit lancer automatiquement au démarrage. Donc, dans un premier temps je test s'il est déjà démarrer en faisant un "systemctl --status-all"
S'il ne figure pas, je fais un "sudo pigpiod".
Malheureusement, si je reteste la présence du daemon dans "systemctl" celui-ci n'apparait pas
Avez vous une idée de la commande à lancer pour visualiser l'état de mon daemon
pigpiod en C++
Modérateur : Francois
Re: pigpiod en C++
Bonjour
Tu as 2 options :
- soit utiliser systemd avec les avantages que cela a (redémarrage, status, log, dépendances vis à vis d'autres services) et ses inconvénients (un petit peu complexe)
- soit à l'ancienne, à l’arrache avec ajoutant le lancement de ton programme dans /etc/rc.local, c'est tout simple mais ce n'est encore possible que pour des raisons de compatibilité et on ne sait pas combien de temps cela sera encore possible (quoi que avec Debian, les évolutions n'arrivent pas tout de suite)
Un exemple mais c'est vraiment très simple) pour /etc/rc.local
ajout (avant le exit !!) dans /etc/rc.local de la ligne qui lance ton programme (mets le chemin complet, c'est plus sûr) et sans oublir un & final (caractère sous le 1 de ton clavier)
Un exemple ici dans lequel, l'utilisateur lance automatiquement python3 avec pour argument son script python à exécuter
https://www.raspberrypi.org/documentati ... c-local.md
Si tu préfères systemd, je t'expliquerai si c'est ton vœux (inutile de surcharger ce post si ce n'est pas nécessaire)
Tu as 2 options :
- soit utiliser systemd avec les avantages que cela a (redémarrage, status, log, dépendances vis à vis d'autres services) et ses inconvénients (un petit peu complexe)
- soit à l'ancienne, à l’arrache avec ajoutant le lancement de ton programme dans /etc/rc.local, c'est tout simple mais ce n'est encore possible que pour des raisons de compatibilité et on ne sait pas combien de temps cela sera encore possible (quoi que avec Debian, les évolutions n'arrivent pas tout de suite)
Un exemple mais c'est vraiment très simple) pour /etc/rc.local
ajout (avant le exit !!) dans /etc/rc.local de la ligne qui lance ton programme (mets le chemin complet, c'est plus sûr) et sans oublir un & final (caractère sous le 1 de ton clavier)
Un exemple ici dans lequel, l'utilisateur lance automatiquement python3 avec pour argument son script python à exécuter
https://www.raspberrypi.org/documentati ... c-local.md
Si tu préfères systemd, je t'expliquerai si c'est ton vœux (inutile de surcharger ce post si ce n'est pas nécessaire)
Re: pigpiod en C++
Bonsoir
Je suis intéressé pour systemd ?
Envoyé de mon SM-A520F en utilisant Tapatalk
Je suis intéressé pour systemd ?
Envoyé de mon SM-A520F en utilisant Tapatalk
Re: pigpiod en C++
Je suis intéressé aussi pour découvrir !
Merci !
Merci !
-
- Raspinaute
- Messages : 1089
- Enregistré le : lun. 15 août 2016 21:38
Re: pigpiod en C++
C'est quoi au juste la question, démarrer un service avec systemd ?
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).
Re: pigpiod en C++
Oui, c'est dans le 1er message.
systemd est à la fois complexe (parce qu'il sait tout faire... sauf le café) et simple
Dans votre cas (lancement d'un programme simple sous la forme d'un service), c'est assez simple :
Il faut un fichier dans /lib/systemd/system/ qui décrit toutes les informations nécessaires.
En général, on le nomme monprogramme.service (ex : gps.service) ou je ne sais quoi, ce que vous voulez.
Une fois que ce fichier y est, il faut activer le service par systemctl enable monprogramme.service et le démarrer une 1ère fois par systemctl start monprogramme.service pour vérifier que ça démarreg bien.
Voici un exemple tout bête dont vous pouvez vous inspirer, il devrai suffit dans votre cas :
Description : le nom de votre service (texte simple)
After : votre service peut démarrer après que ...... tel autre service soit démarré (ici rc-local.service correspondrait à l'ajout d'une ligne de lancement à la fin de /etc/rc.local)
Type= il existe différent types de services (simple, fork, etc..), on ne va pas faire un cours magistrale, donc type=simple c'est parfait pour vous
User=root : quel utilisateur lance le programme ? (ce peut-être pi ou root ou un user système selon votre cas de figure). Le user en question doit avoir les droits nécessaires pour faire ce que le programme a à faire.
ExecStart= le script ou programme à lancer (dans mon cas : un script python)
ExecStop= pas obligatoire, mais dans certains cas, vous pourriez vouloir qu'un autre programme fasse quelques tâches à l'arrêt de votre service
PIDFile= : le nom du fichier qui contiendra le PID (process identifier) de votre service (numéro identifiant le processus)
WantedBy=pour equivalence au Run Level et multi-user.target veut dire quand le système est près à recevoir une demande de logging peu importe que l'interface graphique soit déjà disponible ou pas, sinon, c'est graphical-target
Donc un fichier comme ça, puis systemctl enable monservice.service et au prochain reboot, ça démarre tout seul !
C'est pas dur
Après il y a des dizaines d'options possibles :
- des dépendances (dans les 2 sens)
- lancement avant/après tel ou tel service
- ce qui se passe en cas de plantage du service (redémarrage automatique ? attention, danger ! au bout de combien de temps ? combien d'essais ?)
systemd est à la fois complexe (parce qu'il sait tout faire... sauf le café) et simple
Dans votre cas (lancement d'un programme simple sous la forme d'un service), c'est assez simple :
Il faut un fichier dans /lib/systemd/system/ qui décrit toutes les informations nécessaires.
En général, on le nomme monprogramme.service (ex : gps.service) ou je ne sais quoi, ce que vous voulez.
Une fois que ce fichier y est, il faut activer le service par systemctl enable monprogramme.service et le démarrer une 1ère fois par systemctl start monprogramme.service pour vérifier que ça démarreg bien.
Voici un exemple tout bête dont vous pouvez vous inspirer, il devrai suffit dans votre cas :
Code : Tout sélectionner
[Unit]
Description=monservice
After=rc-local.service
[Service]
Type=simple
User=root
ExecStart=/usr/bin/python3 /home/pi/monservice.py
ExecStop=/bin/bash /home/pi/horam/stopmonservice.sh
PIDFile=/home/pi/monservice.pid
[Install]
WantedBy=multi-user.target
After : votre service peut démarrer après que ...... tel autre service soit démarré (ici rc-local.service correspondrait à l'ajout d'une ligne de lancement à la fin de /etc/rc.local)
Type= il existe différent types de services (simple, fork, etc..), on ne va pas faire un cours magistrale, donc type=simple c'est parfait pour vous
User=root : quel utilisateur lance le programme ? (ce peut-être pi ou root ou un user système selon votre cas de figure). Le user en question doit avoir les droits nécessaires pour faire ce que le programme a à faire.
ExecStart= le script ou programme à lancer (dans mon cas : un script python)
ExecStop= pas obligatoire, mais dans certains cas, vous pourriez vouloir qu'un autre programme fasse quelques tâches à l'arrêt de votre service
PIDFile= : le nom du fichier qui contiendra le PID (process identifier) de votre service (numéro identifiant le processus)
WantedBy=pour equivalence au Run Level et multi-user.target veut dire quand le système est près à recevoir une demande de logging peu importe que l'interface graphique soit déjà disponible ou pas, sinon, c'est graphical-target
Donc un fichier comme ça, puis systemctl enable monservice.service et au prochain reboot, ça démarre tout seul !
C'est pas dur
Après il y a des dizaines d'options possibles :
- des dépendances (dans les 2 sens)
- lancement avant/après tel ou tel service
- ce qui se passe en cas de plantage du service (redémarrage automatique ? attention, danger ! au bout de combien de temps ? combien d'essais ?)
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: pigpiod en C++
Merci piper, je n'ai pas encore testé/travaillé dessus mais je note tout ça !