Programmes à démarrage automatique sur le Raspberry Pi

Il existe plusieurs façons de démarrer automatiquement des programmes sur le Raspberry Pi au démarrage ou lorsque vous vous connectez. Il y a entre autres «cron», «init», Gnome Scheduler. Cependant, la dernière version de Raspbian en inclut une autre, appelée «systemd».

systemd

«Systemd» est en fait une suite d’applications utilisées pour gérer le système d’exploitation. La raison pour laquelle j’aime cela est que vous pouvez configurer un «service» (votre programme) que systemd gérera automatiquement pour vous. Ainsi, si, par exemple, votre programme plante, systemd peut le redémarrer. Cela est particulièrement utile si votre Raspberry Pi est utilisé pour surveiller quelque chose ou enregistrer les mesures qu’il prend et que vous ne voulez rien manquer, ou si vous utilisez un robot basé sur Raspberry Pi dans une compétition et que le plantage du programme de contrôle signifierait la perte points!

Installer

Dans cet exemple, nous allons exécuter un script python à chaque démarrage de votre Raspberry Pi. Ce script est simplement utilisé pour contrôler un robot qui n’a pas d’entrée d’écran ou de clavier, il est donc essentiel d’avoir le programme de contrôle démarrant lorsque le Raspberry Pi démarre. J’ai mis le script dans le répertoire personnel des utilisateurs «pi»:

/home/pi/DriveRobot.py

systemd utilise des fichiers de configuration, appelés fichiers ‘unit’, pour lui dire quoi faire. Créons-en un pour notre robot. Ouvrez une fenêtre de terminal et saisissez ce qui suit:

sudo nano /lib/systemd/system/driverobot.service

Tapez maintenant ceci:

[Unit]
Description=DriveRobot Service
After=multi-user.target

[Service]
Type = inactif

User=pi
ExecStart=/usr/bin/python3 /home/pi/DriveRobot.py

Restart=always
RestartSec=0

[Install]
WantedBy=multi-user.target

Ce fichier d’unité comprend trois sections:

  • le [Unit] La section contient deux valeurs:
    • Le nom du service (‘Description’)
    • Au démarrage, le service doit être démarré (‘After’). Dans ce cas, il sera exécuté une fois le processus systemd multi-utilisateurs terminé. c’est-à-dire au stade où les comptes d’utilisateurs sont disponibles pour le système. C’est avant que le Raspbian Desktop ne soit chargé, donc si vous avez votre Raspberry Pi démarrant en mode Desktop et que vous voulez que votre programme affiche une interface utilisateur sur le bureau, vous devrez changer cela en «graphical.target».
  • le [Service] La section configure ce qui va s’exécuter et que faire si votre programme plante ou se ferme.
    • L’option «Type» de «inactif» indique à systemd d’attendre que tous les autres services soient terminés. C’est ainsi que le démarrage n’est pas ralenti.
    • L’utilisateur définit l’utilisateur sous lequel le programme s’exécutera. Dans ce cas, l’utilisateur standard «pi».
    • ‘ExecStart’ est l’exécutable à démarrer. Dans ce cas, python3 exécutant le script DriveRobot.py. Notez que vous devez donner le chemin complet du programme que vous exécutez (python3) et du script.
    • «Redémarrer» réglé sur «toujours» indique à systemd de surveiller le processus qu’il a démarré, et s’il s’arrête, systemd le redémarrera.
    • ‘RestartSec’ indique à systemd d’attendre 0 seconde avant de redémarrer le programme s’il se termine.
  • La dernière section, [Install], a une directive «WantedBy». Cela indique que le service driverobot sera vaguement lié au service multi-utilisateurs – il sera exécuté une fois que le service multi-utilisateurs aura démarré avec succès.

Une fois enregistré, vous devez modifier les autorisations du fichier d’unité avec:

sudo chmod 644 /lib/systemd/system/driverobot.service

Ce qui le rendra lisible par tous, et seulement accessible en écriture par le propriétaire.

Configuration de systemd

Maintenant que vous avez créé le fichier d’unité, vous devez en informer systemd et l’activer pour que le service driverobot soit démarré à chaque démarrage du Raspberry Pi. Faites ceci avec:

sudo systemctl daemon-reload
sudo systemctl enable driverobot.service

Après quoi, vous pourrez redémarrer votre Raspberry Pi.

Vérification de l’état du service driverobot

Une fois que votre Raspberry Pi a terminé le redémarrage, votre script devrait maintenant être en cours d’exécution. Vous pouvez le vérifier avec la commande systemctl:

sudo systemctl status driverobot.service

Cela devrait renvoyer quelque chose comme ceci:

statut systemctl

Tester un «crash»

Il est utile de tester si systemd va gérer un crash de code. Pour simuler que vous devez «tuer» le processus python qui exécute votre script. Pour trouver l’identité du processus, exécutez ceci:

ps -ax | grep driverobot

Cela devrait renvoyer deux lignes – une pour le processus python3 et une pour le «grep» que vous venez d’exécuter. L’identité du processus (pid) est le premier numéro de la ligne.

Obtention de l'identité du processus (pid)

Pour arrêter votre code, exécutez ce qui suit:

kill -9 xxx

xxx est l’identité du processus que vous venez de trouver.

Vérifiez maintenant si votre code a été redémarré en exécutant à nouveau ceci:

ps -ax | grep driverobot

Vérification du redémarrage du service

Si systemd a fait son travail correctement, vous devriez voir un processus python3 toujours en cours d’exécution, mais cette fois avec une identité de processus différente.

Sommaire

Vous avez maintenant la possibilité d’exécuter votre code, ou n’importe quel programme, à chaque démarrage de votre Raspberry Pi, et de le faire fonctionner tout le temps!

Articles similaires

Bouton retour en haut de la page
Fermer