Comment exécuter un programme au démarrage de la Raspberry Pi ?
CommentairesOn a parfois besoin d’exécuter un programme ou une ligne de commande au moment où notre Raspberry Pi démarre.
C’est notamment le cas quand on fabrique un objet pour de la domotique, et que l’on souhaiterai lancer automatiquement un programme au branchement de l’objet.
Dans ce tutoriel nous allons voir une façon très simple de lancer un programme au démarrage de la Raspberry.
Le matériel que nous allons utiliser.
Dans ce tutoriel nous avons besoin seulement de :
Si vous souhaitez réaliser ce tutoriel sans pouvoir accéder directement à la Raspberry Pi, vous devrez également disposer d’un PC en mesure de lire les cartes SD ou utiliser un adaptateur.
Lancer un programme au démarrage de la Raspberry Pi avec rc.local.
Pour Mac OS et Windows vous aurez besoin de pouvoir accéder à la partition rootfs si vous voulez faire cette opération depuis votre PC. Pour cela, consultez notre tutoriel pour lire une partition Linux depuis Mac et Windows.
Pour lancer un programme au démarrage de la Raspberry Pi le plus simple est d’utiliser le fichier /etc/rc.local
.
Ce fichier contient un ensemble de commandes qui seront exécutées juste avant que la Raspberry Pi n’ai fini de booter.
Pour lancer un programme au démarrage de la Raspberry Pi, il vous suffit donc de modifier le fichier /etc/rc.local
sur la carte SD (depuis la Pi, ou en modifiant le fichier /etc/rc.local
dans la partition rootfs
de la carte branchée à votre PC).
Pour que le programme soit lancé, il vous suffit de chercher la ligne :
exit 0
dans le fichier et d’ajouter la ligne de commande appelant votre programme avant la ligne exit
.
Par exemple, si je veux appeler un script Python 3 nommé example.py
et situé dans le dossier /home/pi
au démarrage, je vais remplacer la ligne exit 0 par :
/usr/bin/python3 /home/pi/example.py
Quelques points importants sont à noter.
Premier point, le programme sera exécuté par l’utilisateur root
et aura donc tous les droits. Attention à ce que vous faîtes !
Deuxième point, vous devriez toujours utiliser les chemins absolus et non relatifs, le comportement des chemins relatifs est imprévisible.
Troisième et dernier point, votre programme doit rendre la main au script ou la Raspberry Pi ne pourra jamais finir de booter. Si votre programme effectue une boucle infinie, vous devez le lancer en tâche de fond en ajoutant un &
après la commande. Dans notre cas cela donnerait :
/usr/bin/python3 /home/pi/example.py &
Votre programme sera désormais correctement lancé au démarrage de la Raspberry Pi !
Bonjour Colibri, est ce que vous pouvez poster plus de détails par rapport à ta méthode svp, merci 🙂
Coucou moi j’ai essayé de lancer par crontab par rapport.local oue créant un sh mais sans succès..je désespère
Hi!
Ce message pour un retour d’expérience, qui pourra peut-être être utile à certain.. Je n’ai pas réussi à lancer le script avec la méthode présentée, ni celle de crontab, ni profile (trouvée sur internet).
Le fichier s’exécute sans problème lorsque je le lance via le terminal et que j’ai rendu le script exécutable(chmod) et ai même réinstaller Raspbian pour être sûr que je n’avais pas modifié accidentellement un fichier.
Finalement j’ai réussi en insérant le chemin d’accès dans le document /home/pi/.bashrc, après mainte recherche sur le net. Je précise que le scipt utilise le module telebot, je débute aussi en Rpi et en programmation plus généralement, peut-être que les problèmes venaient de là aussi 🙂
Salut, ce que tu décris ressemble beaucoup à une erreur due à l’absence d’un chemin dans l’environnement. Le problème est généralement rencontré quand on utilise des chemins relatifs ou simplement des noms de commandes au lieu d’utiliser directement le chemin absolu.
Hello,
Perso, je préfère utiliser systemd pour démarrer un programme automatiquement au boot (je n’ai jamais utilisé rc.local plutôt) car il me semble que c’est plus réçent en présent sur tous les Linux réçents.
Cela permet de positionner des variables d’environnement, de relancer le programme en cas de crash, de récupèrer plutôt facilement les logs (avec systemctl status nomDuServiceCréé) etc.
En fait systemd n’est pas dispo sur toutes les distributions, il y a même eu des débats sans fin sur son utilisation où non à l’époque de sa montée en puissance.
Techniquement systemd est une meilleure solution que
rc.local
, ça ne fait aucun doutes, maisrc.local
est la technique mise en avant par la fondation. Par ailleurs,rc.local
est bien plus simple à comprendre et à prendre en main pour un débutant.Bonjour,
Je souhaiterais lancer automatiquement un programme à l’ouverture d’une session utilisateur particulière et pas automatiquement sur les autres sessions.
Comment procéder ?
Merci et merci pour le tuto.
Salut, je ne connais pas la procédure exacte de tête mais il me semble que la solution serait de rajouter dans commandes dans un fichier qui doit probablement être dans le home du user sous le .bashrc ou quelque chose comme ça.
su user
crontab -e
@reboot inserer la commande ici
C’est une solution qui peut fonctionner mais qui ne va pas exactement lancer les choses aux mêmes moments. Mais merci pour la suggestion.