Lorsque j’ai commencé avec un Raspberry Pi, je l’utilisais souvent pour traiter des scripts de longue durée, comme la surveillance continue d’un flux vidéo ou un petit script qui recueillait des données sur le Web. Le problème que j’ai rencontré était de savoir comment rester connecté au Pi assez longtemps pour que le script ne se termine pas.
Vous pouvez connecter un clavier, un moniteur et faire fonctionner le pi de cette façon – mais je préfère travailler avec mon Raspberry Pi sur SSH, afin que je puisse avoir tout le confort de mon ordinateur habituel.
Alors, comment garder un script sur votre Pi en cours d’exécution pendant une longue période via SSH afin qu’il n’expire pas et n’échoue pas ? Il y a plusieurs façons.
Ce dont vous aurez besoin pour ce projet
Comment exécuter des scripts de longue durée sur votre Raspberry Pi
Avant de commencer, configurez votre Raspberry Pi. Si vous ne l’avez pas encore fait, consultez notre article sur la façon de configurer un Raspberry Pi pour la première fois ou comment faire un installation sans tête de Raspberry Pi (sans le clavier et l’écran). Pour ce projet, nous recommandons un installation sans tête de Raspberry Pi.
Selon le projet sur lequel vous travaillez, nous aborderons deux méthodes pour gérer les scripts de longue durée. Si vous n’exécutez un script qu’une ou deux fois, utilisez la méthode tmux. Si vous configurez votre Pi pour un projet à long terme et que vous souhaitez un script qui redémarre automatiquement, passez à la méthode « service ».
Utiliser tmux sur votre Raspberry Pi
Le package tmux vous permet de créer un shell séparé dont vous pouvez vous détacher et le laisser s’exécuter en arrière-plan. Si vous aviez un programme unique dont vous savez qu’il va prendre beaucoup de temps (une commande make build par exemple), vous pouvez créer une session tmux, exécuter votre longue commande, vous détacher de cette session et vous déconnecter du pi sans souci. Tant que vous n’interrompez pas l’alimentation du pi, votre script devrait continuer à s’exécuter. Vous pouvez vous attacher à la session et la vérifier périodiquement et la détacher pour la laisser s’exécuter.
Si cela semble correspondre à votre cas d’utilisation ; voici comment l’utiliser.
1. Installez le paquet tmux.
sudo apt-get install -y tmux
2. Créez une nouvelle session tmux.
# pick any session name you like
tmux new -s your_session_name
python3 my_really_long_running_script.py
3. Se détacher de la session en utilisant les touches suivantes :
Hit “Ctrl + B”
Then hit “D”
Vous serez renvoyé à votre session d’origine, avec votre script de longue durée exécuté en arrière-plan. Vous pouvez vous déconnecter à ce stade.
4. À se rattacher à la session pour vérifier comment ça se passe, exécutez simplement ce qui suit
# list all the sessions running
tmux list-sessions
# attach to your session
tmux a -t your_session_name
Et c’est tout. Vous pouvez à nouveau détacher comme décrit à l’étape 4 si vous le souhaitez. Tmux est mieux utilisé pour les commandes que vous exécutez ponctuellement, comme une étape d’installation. Si vous cherchez à exécuter quelque chose à long terme, en continu, avec un redémarrage automatique, vous voudrez créer un service.
Créer un service sur votre Raspberry Pi
Un service est mieux utilisé pour une application que vous souhaitez exécuter en continu sur votre pi. Il s’agit peut-être d’un script qui vérifie constamment les données de la station météo et les envoie dans le cloud, ou d’une simple application qui écoute les demandes de changement de couleur d’une bande LED. Si vous recherchez quelque chose qui peut gérer les redémarrages automatiquement et démarre au démarrage du Pi, un service est une excellente solution.
1. Pour créer un service, commencez par testez si le script que vous souhaitez exécuter fonctionne correctement. Assurez-vous d’utiliser le chemin d’accès complet au fichier lorsque vous l’invoquez.
python3 /home/pi/my_script.py
2. Ensuite, nous allons créer un fichier dans /etc/systemd/system pour définir notre service:
sudo touch /etc/systemd/system/myscript.service
3. Nous allons ensuite modifier le fichier en ajoutant les informations requises pour définir le service et lui permettre de redémarrer en cas d’échec.
sudo nano /etc/systemd/system/myscript.service
Ajoutez les lignes suivantes au fichier
[Unit]
Description=My long running script
After=network.target
StartLimitIntervalSec=0[Service]
Type=simple
User=pi
Restart=always
RestartSec=1
ExecStart=python3 /home/pi/my_script.py
[Install]
WantedBy=multi-user.target
4. Une fois que vous avez enregistré votre fichier, démarrer et activer le service – lui permettant de s’exécuter immédiatement, et aussi lorsque le pi redémarre.
sudo systemctl start myscript && sudo systemctl enable myscript
5. Votre script s’exécutera maintenant sur votre pi en arrière-plan, redémarrant automatiquement en cas d’échec. Tu peux vérifiez-le avec la commande suivante:
sudo systemctl status myscript
Et c’est tout. De nombreux services fonctionnent déjà sur votre Pi dans le cadre de son fonctionnement normal. En définissant et en activant ce service, vous ajoutez simplement votre script au reste des choses que votre Pi fait simplement en étant branché. Si à tout moment vous avez besoin d’arrêter le service, vous pouvez le faire avec la commande suivante :
sudo systemctl stop myscript
Il existe de nombreuses autres façons d’exécuter des scripts en arrière-plan, mais pour les projets Raspberry Pi, ces deux sont mes commandes préférées. Bonne construction !
# pick any session name you like
tmux new -s your_session_name