Nombreux sont mes projets où, pour fonctionner, il fallait lancer un script Python. Par exemple pour une station de contrôle, un Jukebox avec puce RFID, ou encore un système d’alarme de sécurité.
Le problème est qu’il est assez embêtant de devoir le lancer à la main à chaque démarrage du Raspberry Pi… Car cela implique d’avoir toujours un clavier, une souris et un écran de branché, ou de se connecter en SSH pour le lancer.
La solution est de démarrer le script Python dès que le Raspberry Pi démarre, et nous allons voir comment faire dans cet article.
Sommaire
1. Créer un script shell à exécuter
Dans mon dossier d’utilisateur, je vais créer un fichier shell qui contiendra les commandes à exécuter pour lancer le script Python.
cd /home/pi nano lancement.sh
La première ligne “cd /home/pi” permet de se déplacer dans votre répertoire utilisateur.
La commande “nano lancement.sh” va créer le fichier “lancement.sh” et ouvrira l’éditeur de texte nano pour que l’on puisse écrire dans le fichier.
Dans le fichier, écrire les commandes pour exécuter votre script Python :
cd /home/pi/mon-programme python3 mon-programme.py
Sauvegardez avec le raccourci Control + X, confirmez en appuyant sur “O” et validez en appuyant sur Entrée.
2. Rendre le fichier exécutable
Avant de pouvoir utiliser ce fichier shell, il faut le rendre exécutable :
chmod 755 lancement.sh
Testez votre fichier et vérifiez que votre script python se lance avec la commande :
sh lancement.sh
Si tout fonctionne, vous pouvez passer à l’étape suivante.
3. Créer un fichier de logs
Dans votre répertoire utilisateur, créez un dossier “logs” qui contiendra les différents fichiers logs de vos programmes. Ils serviront à avoir une trace écrite en cas d’erreur de votre programme.
mkdir /home/pi/logs
4. Ajouter dans le crontab
crontab est un processus qui permet d’exécuter des scripts en tâche de fond. Il va exécuter des scripts et commandes à des heures précises ou lors d’évènements précis.
Pour ajouter une nouvelle commande dans crontab :
sudo crontab -e
En bas du fichier, ajoutez la ligne :
@reboot sh /home/pi/lancement.sh > /home/pi/logs/log.txt 2>&1
Cette ligne va permettre d’effectuer la commande “sh /home/pi/lancement.sh” lors du démarrage du Raspberry Pi, et enregistrera les messages d’erreur et logs dans le fichier “/home/pi/logs/log.txt”.
Sauvegardez avec le raccourci Control + X.
5. Vérifiez que tout fonctionne
Redémarrez votre Raspberry Pi
reboot
Si votre programme ne s’est pas lancé ou qu’il y a un problème, regardez alors dans le fichier de logs les erreurs qui sont survenues.
J’espère que ça a pu vous aider ! Ecrivez-moi en commentaire à quoi va vous servir ce script 🙂
21 commentaires
Bonjour,
Merci pour ce petit tuto qui m’a facilité la vie.
Pas de rc.local, de init.d, etc….
J’avais juste besoin de lancer 2 scripts qui lançaient 2 executables java pour récuperer les valeurs de deux centrales d’acquisitions.
En revanche, tout ceci s’éxecute maintenant en arrière plan, il faut que je trouve comment afficher la fenetre…
Merci!
Bonjour,
malheureusement pour moi, ce tutoriel ne fonctionne pas.
Lorsque je lance la commande sh lancement.sh, mon programme se lance correctement mais malgré avoir bien suivi les étapes 3 et 4, et plusieurs tentatives mon programme ne se lance pas au démarrage…
Cela ne vient surement pas de ce tutoriel qui est bien expliqué et bien clair.
Cela ne fonctionne pas non plus avec :
rc.local,
ni avec: /etc/xdg/lxsession/LXDE-pi/autostart et n’oubliant pas de rendre mon programme executable avec sudo chmod 755 /home/pi/mon_programme.py ou sudo chmod 755 /home/pi/mon_programme.py.
Bref, je galère mais merci pour ce tutoriel.
fait un truc qui le marque dans un fichier .txt comme ca t’a juste a ouvrir le fichier pour avoir les infos 😉
cela va me servir à lancer open.cpn dès le demarage de mon Pi4 sous rasbian open-ploteur. merci
Merci pour ce tuto, cela m’aide vraiment pour mon projet 😉
moi pour lancer mon serveur Minecraft donc merci
Merci beaucoup !
Info pour les suivants : j’ai un peu galéré parce que le script lancement.sh n’a fonctionné que quand j’y ai écrit
cd /home/pi
sans la fin que tu as donné
Personnellement, ce tuto m’as servi pour un TIPE de concours d’école d’ingé !
bonsoir,
j’ai suivi le tuto , apparemment le réseau ne démarre pas assez vite j’ai des erreurs
“OSError: [Errno 101] Network is unreachable” peut être faudrait il temporiser le demarrage?
Bonsoir,
J’ai exactement le même problème, j’ai tenté une temporisation dans mon script au démarrage avant qu’il ne tente de ce connecter à une base de données sans succès à ce jour…
Merci beaucoup pour ce tuto !
Pour info, avec un petit sleep 90s en début de script on peut temporiser, dans le cas d’une attende de connexion internet pour lancer le script par exemple.
Merci, moi ca me lance mon script pour mon bar automatique 🙂
Bonjour, très novice dans le code. Dois-je mettre #!/bin/bash au debut du fichier shell? Merci par avance.
Je dois gérer des machines a laver d’une copropriété où les machines sont communes. Chacun a donc un badge RFID pour allumer l’une ou l’autre machine. J’ai donc développé un p’tit soft qui permet de gérer tout ca. Une lecture du badge en Python qui ensuite envoie des requêtes PHP avec une Maria DB (MySQL) Il me fallait donc la possibilité de lancer le soft automatiquement au démarrage en cas de panne ou de maintenance. Merci
Seul petit bémol, pas d’explication concernant le :”2>&1″.
Perso, j’ai ce que je cherchais donc j’ai pas investigué, mais en tous cas, chez moi ca ne marche pas et je n’ai pas besoin de loguer.
Cela va me permettre de lancer un script pour contrôler le ventilateur. Merci pour ce tuto
Parfait !
Bonjour et merci pour ce tuto. Mais, si dans ce programme de démarrage j’introduis une prise de vue avec une caméra, elle n’apparaît pas mais fonctionne en arrière-plan!!! y a-t-il une solution? Merci pour vos réponses.
Je bataille depuis plusieurs jours, mais je vais y arriver
Bonjours,
je suis débutant en Rasberrypi et j’essaye d’apprendre.
J’ai suivis ton tuto et je comprend pas j’ai plein de message d’erreur et j’arrive pas a reboot le système car ca me marque failed.
Bonjour, ça ne marche pas après le reboot !! Par contre quand je clique sur LXTerminal, mon programme se lance bien !!
Qu’en penses-tu ??
Marc
bonjour
j’ai essayé d’utiliser votre méthode pour lancer SIP (programmateur arrosage sur github); Lorsue je lance la commande lancement.sh pas de souci cela fonctionne bien par contre au reboot le fichier logs mentionne :
“Traceback (most recent call last):
File “/home/dominique/SIP/sip.py”, line 21, in
import gv
File “/home/dominique/SIP/gv.py”, line 106, in
from helpers import load_programs, station_names, days_since_epoch
File “/home/dominique/SIP/helpers.py”, line 21, in
from gpio_pins import set_output
File “/home/dominique/SIP/gpio_pins.py”, line 36, in
if gv.platform == “pi”:
AttributeError: partially initialized module ‘gv’ has no attribute ‘platform’ (most likely due to a circular import)
Avez vous une idée (j’ai essayé sur 2 raspberry différent avec le même résultat)?
En vous en remerciant d’avance
Merci !
Le script dans mon cas, va permettre d’envoyer un email collectif aux utilisateurs du lieu lorsque la chaudière est en défaut.