Modifications

Sauter à la navigation Sauter à la recherche
5 325 octets ajoutés ,  20 mai 2017 à 22:07
Ligne 32 : Ligne 32 :     
=== 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://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