Modifications

Sauter à la navigation Sauter à la recherche
5 625 octets ajoutés ,  9 février 2018 à 09:42
Ligne 1 : Ligne 1 :  
{{MCH-Aider}}
 
{{MCH-Aider}}
   −
{{traduction}}
   
== Introduction ==
 
== Introduction ==
 
Si vous lisez cette page c'est probablement parce que vous avez besoin de démarrer automatiquement un script python au démarrage de votre Pi.
 
Si vous lisez cette page c'est probablement parce que vous avez besoin de démarrer automatiquement un script python au démarrage de votre Pi.
Ligne 32 : Ligne 31 :     
=== Déclaration d'un service SystemD ===
 
=== Déclaration d'un service SystemD ===
Nous avons un script Python qui ne fait que lire des données sur un WebService et [[LCD-USB-TTL-Raspberry|afficher les données sur un afficheur LCD USB]].
+
Nous avons un script Python {{fname|lcdordertrack.py}} qui lit des données sur un WebService et [[LCD-USB-TTL-Raspberry|afficher les données sur un afficheur LCD USB]].
   −
Nous avons [http://arduino103.blogspot.be/2016/10/systemd-demarrage-automatique-dun.html décrit la marche à suivre dans cet article] (blog.mchobby.be)
+
Voici, en quelques étapes, les opérations effectuées pour démarrer automatiquement le script {{fname|lcdordertrack.py}} au démarrage du Pi sous SystemD
   −
{{traduction}}
+
==== Déclarer le service (une unité/unit) ====
   −
'''todo:''' dupliquer l'information sur cette page.
+
sudo nano /lib/systemd/system/lcdordertrack.service
 +
 
 +
Et y ajouter le contenu suivant:
 +
 
 +
<nowiki>[Unit]
 +
Description=MCHobby LCD Order Tracker
 +
After=multi-user.target
 +
 
 +
[Service]
 +
Type=idle
 +
ExecStart=/usr/bin/python /home/pi/PrestaConsole/lcdordertrack.py > /home/pi/lcdordertrack.log 2>&1
 +
 
 +
[Install]
 +
WantedBy=multi-user.target</nowiki>
 +
 
 +
Utiliser la combinaison de touche CTRL-X, Y pour quitter nano en sauvant le fichier.
 +
 
 +
Vous noterez que nous avons ajouté des redirections (sortie standard et sortie erreur) vers des fichiers de log.
 +
 
 +
==== Permission sur le service (l'unité) ====
 +
<font color="red">'''Un point vraiment important est de fixer correctement les permissions sur notre nouveau fichier!'''</font>
 +
 
 +
sudo chmod 644 /lib/systemd/system/myscript.service
 +
 
 +
Activer le service (unité) dans SystemD
 +
 
 +
sudo systemctl daemon-reload
 +
sudo systemctl enable myscript.service
 +
 
 +
La deuxième ligne va créer un lien symbolique (propre au système) qui activera le service au prochain démarrage.
 +
 
 +
Le plus facile maintenant est encore de faire un
 +
 
 +
sudo reboot
 +
 
 +
==== Eviter les pièges - Utilisateur vs SystemD ====
 +
En utilisant un script python, vous devez garder à l'esprit qu'il n'utilise pas votre "login" courant pour fonctionner.
 +
 
 +
Donc, ce qui est valable en session interactive ne le sera pas forcément lorsqu'il sera exécuté avec SystemD (le processus parent sera SystemD, donc avec un '''PID = 1''')
 +
 
 +
Par exemple, si vous chargez un fichier de configuration ("ini"), {{underline|vous devrez spécifier le chemin complet}} vers le fichier (alors qu'il est simplement chargé depuis le répertoire courant si vous lancez votre script à la main dans un shell).
 +
 
 +
==== Etat du service et instructions utiles ====
 +
Il arrive souvent que cela ne fonctionne pas la première fois, c'est qu'utiliser un service à certaines contraintes (droit accès, sécurité sur les fichiers comme sur le GPIO par exemple, accès à certaines ressources).
 +
 
 +
Nous avons prévu des fichiers de log dans dans la commande de démarrage ( /home/pi/lcdordertrack.log ), utile pour récupérer les informations produites par l'instruction print().
 +
 
 +
SystemD produit également de nombreuses informations utiles avec l'option {{fname|status}} .
 +
 
 +
sudo systemctl status lcdordertrack.service
 +
 
 +
ce qui avait produit ce résultat très intéressant:
 +
 
 +
<nowiki>lcdordertrack.service - MCHobby LCD Order Tracker
 +
  Loaded: loaded (/lib/systemd/system/lcdordertrack.service; enabled)
 +
  Active: failed (Result: exit-code) since Sat 2016-10-29 10:38:13 UTC; 2min 45s ago
 +
  Process: 636 ExecStart=/usr/bin/python /home/pi/PrestaConsole/lcdordertrack.py > /home/pi/lcdordertrack.log 2>&1 (code=exited, status=1/FAILURE)
 +
Main PID: 636 (code=exited, status=1/FAILURE)
 +
 
 +
Oct 29 10:38:13 r1501 python[636]: Traceback (most recent call last):
 +
Oct 29 10:38:13 r1501 python[636]: File "/home/pi/PrestaConsole/lcdordertrack.py", line 39, in
 +
Oct 29 10:38:13 r1501 python[636]: config = Config()
 +
Oct 29 10:38:13 r1501 python[636]: File "/home/pi/PrestaConsole/config.py", line 34, in __init__
 +
Oct 29 10:38:13 r1501 python[636]: self._presta_api_key = config.get( CONFIG_SECTION_PRESTAAPI, CONFIG...KEY )
 +
Oct 29 10:38:13 r1501 python[636]: File "/usr/lib/python2.7/ConfigParser.py", line 607, in get
 +
Oct 29 10:38:13 r1501 python[636]: raise NoSectionError(section)
 +
Oct 29 10:38:13 r1501 python[636]: ConfigParser.NoSectionError: No section: 'PRESTA-API'
 +
Oct 29 10:38:13 r1501 systemd[1]: lcdordertrack.service: main process exited, code=exited, status=1/FAILURE
 +
Oct 29 10:38:13 r1501 systemd[1]: Unit lcdordertrack.service entered failed state.
 +
Hint: Some lines were ellipsized, use -l to show in full.</nowiki>
 +
 
 +
Où nous pouvons voir qu'il y avait un problème dans le script {{fname|config.py}} (et donc la lecture de notre {{fname|config.ini}})
 +
 
 +
C'est la raison pour laquelle nous avons mentionné, plus tôt, qu'il fallait indiqué le chemin d'accès complet vers le fichier de configuration.
 +
 
 +
==== Démarrer, arrêter, ... ====
 +
sudo systemctl start lcdordertrack.service
 +
 
 +
Voici la commande type qui permet de démarrer le service après modification ou ajustement.
 +
 
 +
Vous avez également l'opportunité d'utiliser les commandes '''start''', '''stop''' et '''restart'''. Les commandes '''enable''' et '''disable''' permettent respectivement d'activer et désactiver un service.
 +
 
 +
==== Ressources utiles ====
 +
Je vous recommande chaudement les lectures suivantes (source d'information utiles pour systemD et le démarrage d'un script python depuis systemD).
 +
* [https://linuxfr.org/news/systemd-pour-les-administrateurs-partie-1-et-2 SystemD pour les administrateur - parties 1 et 2] (''LinuxFr.org, Français'')
 +
* [https://linuxfr.org/news/systemd-pour-les-administrateurs-parties-3-4-et-5 SystemD pour les administrateur - parties 3,4 et 5]  (''LinuxFr.org, Français'')
 +
* [https://medium.com/@johannes_gehrs/getting-started-with-systemd-on-debian-jessie-e024758ca63d#.gm57hiwi5 Getting Started With systemd on Debian Jessie]
 +
* [http://www.raspberrypi-spy.co.uk/2015/10/how-to-autorun-a-python-script-on-boot-using-systemd/ How To Autorun A Python Script On Boot Using systemd]
 +
* [https://learn.adafruit.com/running-programs-automatically-on-your-tiny-computer/systemd-writing-and-enabling-a-service Running Programs Automatically on Your Tiny Computer] (Adafruit.com)<br />Avec un excellent exemple pour créer un mini serveur/Service HTTP en Python :-)
 +
* [http://www.framboise314.fr/systemd-tout-nouveau-tout-beau-ou-pas/#Comment_demarre_le_systeme systemd, tout nouveau tout beau ? ou pas...] (Framboise314)<br />Explique en autre comment démarrer vncserver avec systemd
    
=== Contourner SystemD (application graphique) ===
 
=== Contourner SystemD (application graphique) ===
29 917

modifications

Menu de navigation