Il est pratique de lancer un programme ou un script au démarrage du Raspberry Pi, soit pour exécuter des tâches de fond ou lancer vos logiciels favoris dès le boot du Raspberry Pi et vous faire gagner du temps. Nous allons voir dans ce tutoriel, comment lancer automatiquement des programmes sur Linux.
Les différentes méthodes pour lancer un programme au démarrage du Raspberry Pi ou d’une machine Linux
- rc.local
- .bashrc
- systemd
- crontab
- autostart
Utilisation de rc.local
Le fichier rc.local s’exécute au démarrage après tous les scripts d’initialisation, avant le login utilisateurs et donc avant le chargement du bureau. Il est utilisé pour lancer des commandes et services particuliers.
Il est possible de démarrer un script en ajoutant la ligne de commande dans le fichier rc.local avant la ligne « exit 0 ».
sudo nano /etc/rc.local
# # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. # # In order to enable or disable this script just change the execution # bits. # # By default this script does nothing. # Print the IP address _IP=$(hostname -I) || true if [ "$_IP" ]; then printf "My IP address is %s\n" "$_IP" fi #add command to run script /usr/bin/python /home/pi/Code/Flask/webinterface.py exit 0
N.B. la commande est lancée avec les privilèges administrateur (root)
D’autres fichiers peuvent être utilisés pour lancer des scripts ou personnaliser le terminal
- Lorsque le système démarre:
/etc/rc.local
, pour démarrer des services au démarrage (serveur, etc.) - Lorsqu’un utilisateur se connecte:
~/.profile
, personnaliser un compte , définir des variables d’environnement - Lorsqu’un terminal bash est ouvert:
~/.bashrc
(.zshrc pour zsh, etc.) afficher des données, personnaliser le terminal
Création d’un service avec systemd
Pour cet exemple, nous allons créer un script bash qui va surveiller la température CPU et afficher un message si la température devient trop élevée.
#!/usr/bin/bash # get message and open pop-up if temp is too high MESSAGE=$(vcgencmd measure_temp) TEMP=$(cat /sys/class/thermal/thermal_zone0/temp) TEMP_THR=35000 DISPMSG=$(echo $MESSAGE ">" $((TEMP_THR / 1000))) echo $DISPMSG export DISPLAY=:0.0 if [ $TEMP \> $TEMP_THR ]; then echo "CPU temp too high"; echo $DISPMSG > /home/pi/Code/Monitoring/montmp_log.txt #notify-send "CPU is to high :" $DISPMSG #xmessage -buttons Ok:0 -default Ok -nearmouse "CPU is to high ${DISPMSG}" -timeout 10 zenity \ --warning\ --width=200 --height=60\ --text="<span>CPU is to high !</span>\n\n<b>${DISPMSG}</b>." \ --title="CPU Temp monitor" \ --ok-label="Ok" \ --display=:0.0 else echo "CPU temp ok"; fi;
Pour rendre le fichier exécutable, on utilise chmod
sudo chmod 771 monitor_temp.sh
Ensuite vous pouvez créer le service mon-cpu-tmp
sudo nano /etc/systemd/system/mon-cpu-tmp.service
[Unit] Description=Service of temperature monitoring [Service] Environment=DISPLAY=:0.0 Environment=XAUTHORITY=/home/pi/.Xauthority ExecStart=/home/pi/Code/Monitoring/monitor_temp.sh Type=oneshot [Install] WantedBy=multi-user.target
sudo chmod 644 /etc/systemd/system/mon-cpu-tmp.service
Afin de lancer le script de manière périodique, il faut créer et lier un timer au service. Pour cela, créez un fichier timer du même nom que le fichier .service
sudo nano /etc/systemd/system/mon-cpu-tmp.timer
[Unit] Description=Monitor CPU temperature [Timer] #service starts 2min after boot OnBootSec=2minutes # service execute every 5min OnUnitActiveSec=5minutes Persistent=true [Install] WantedBy=timers.target
Vous pouvez ensuite activer le service avec la commande systemctl
sudo systemctl daemon-reload
sudo systemctl enable <service_name>
sudo systemctl enable <service_timer>
sudo systemctl start <service_name>
sudo systemctl start <service_timer>
Après le redémarrage de la machine, vous pouvez vérifier le status du service
systemctl status <service_name>
Quelques commandes pratique de systemctl
systemctl start/stop <service_name>
systemctl enable/disable <service_name>
systemctl reload <service_name>
systemctl kill <service_name>
Création d’un tâche automatique avec crontab
Des tâches périodiques automatisées peuvent se programmer avec crontab. Pour lancer l’éditeur de tâches cron, entrez la commande suivante
crontab -e
Vous pouvez ensuite spécifier le moment auquel exécuter la tâche
- m minutes (0-60)
- h heure (0-24)
- dom jour du mois (1-30)
- mon mois (1-12)
- dow jour de la semaine (1-7)
- command commande d’exécution de la tâche
Vous pouvez également lancer une tâche au démarrage
@reboot <command>
# Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined through a single line # indicating with different fields when the task will be run # and what command to run for the task # # To define the time you can provide concrete values for # minute (m), hour (h), day of month (dom), month (mon), # and day of week (dow) or use '*' in these fields (for 'any'). # # Notice that tasks will be started based on the cron's system # daemon's notion of time and timezones. # # Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). # # For example, you can run a backup of all your user accounts # at 5 a.m every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # m h dom mon dow command
Pour le test, nous exécutons le script toutes les 5 minutes.
# m h dom mon dow command
*/5 * * * * /home/pi/Code/Monitoring/monitor_temp.sh
Lancer une application bureautique dans l’autostart
Pour lancer une application de bureau, avec une interface graphique, comme scratch, il faut lancer le programme après le chargement du bureau du Raspberry Pi.
sudo nano /etc/xdg/lxsession/LXDE-pi/autostart
Vous pouvez ensuite rajouter la commande pour lancer le programme précédée de @
@/usr/bin/scratch3