fbpixel
Étiquettes : ,

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>
systemd-service-timer-cpu-temp-monitor Lancer un programme au démarrage du Raspberry Pi

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

Sources