Différences entre versions de « Rasp-AutoStart-Script »

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche
Ligne 35 : Ligne 35 :
  
 
Nous avons [http://arduino103.blogspot.be/2016/10/systemd-demarrage-automatique-dun.html décrit la marche à suivre dans cet article] (blog.mchobby.be)
 
Nous avons [http://arduino103.blogspot.be/2016/10/systemd-demarrage-automatique-dun.html décrit la marche à suivre dans cet article] (blog.mchobby.be)
 +
 +
{{traduction}}
 +
 +
'''todo:''' dupliquer l'information sur cette page.
  
 
=== Contourner SystemD (application graphique) ===
 
=== Contourner SystemD (application graphique) ===

Version du 6 février 2017 à 19:41


MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.

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.

Garder bien à l'esprit les éléments suivants qui peuvent largement influencer le démarrage ou non de votre script:

  1. Si vous avez une interface utilisateur, l'utilisateur qui lancera le script doit pouvoir accéder au terminal!
  2. Si vous utilisez des ressources particulières (eg: le GPIO), l'utilisateur qui lancera votre script doit posséder les droits adéquats.

System V vs System D

  • Raspbian Wheezy (et prédécesseurs) utilise un système d'initialisation basé sur System V, ses RunLevels et scripts shell d'initialisations.
  • Depuis Raspbian Jessie (courant 2016), le système d'initialisation est basé sur le très controversé SystemD (Wikipedia.fr)

Suivant la version de Rapsbian, vous pourrez utiliser une méthode où une autre.

Avec System V

Utilisable jusqu'à Raspbian Whezzy, le système d'initialisation basé sur des RunLevels et des scripts.

System V permet d'insérer facilement le lancement d'un script... mais malheureusement, ce système est remplacé par SystemD (nettement moins transparent).

Si vous avez besoin de démarrer un script sous System V, vous pouvez consulter notre "tutoriel Init-Script pour écran LCD"

Avec System D

SystemD (Wikipedia.fr) est apparu depuis Raspbian Jessie.

Notre expérience personnelle de SystemD n'a pas été des plus réjouissantes... dans les faits, installer une horloge temps réel sur le Pi s'est révéler être un cauchemar de configuration (et il reste encore des surprises).

Décrié par une grande partie de la communauté Linux, SystemD s'est pourtant fait une place... il faut donc composer avec lui!

Voici quelques solutions constructives.

Déclaration d'un service SystemD

Nous avons un script Python qui ne fait que lire des données sur un WebService et afficher les données sur un afficheur LCD USB.

Nous avons décrit la marche à suivre dans cet article (blog.mchobby.be)

todo: dupliquer l'information sur cette page.

Contourner SystemD (application graphique)

Nous avons également une application PyGame que nous voulions démarrer en même temps que le Raspberry-Pi.

Voici comment nous nous y sommes pris.

  1. Utiliser sudo raspi-config pour logger automatiquement votre pi en mode console
  2. Ecrire un fichier /home/pi/my_app/my_app.sh qui contient de quoi démarrer votre application.
    C'est à la fois pratique durant vos développements et facilite le démarrage
#!/bin/bash

MYAPP_DIR=/home/pi/my_app

cd "${MYAPP_DIR}"

# initialisation diverses pour votre script
if [[ $1 == "set-time" ]]; then
  sudo gnome-control-center datetime
fi

# Utiliser sudo si necessaire
sudo python my_app.py >>my_app.log 2>>my_app.err

cd -
  1. Maintenant modifiez le fichier .baschrc

Rendez vous dans votre répertoire home, puis éditez votre fichier .bashrc

cd ~
nano .bashrc

ajoutez la section similaire à celle ci-dessous pour démarrer automatiquement votre script my_app.sh.

# starts my_app (if not started yet)
ps -a | grep -v grep | grep my_app.sh > /dev/null
result=$?
if [ "${result}" -eq "0" ]
  then echo "MY_APP is already running!"
else
   tty | grep tty1 > /dev/null
   result=$?
   if [ "${result}" -eq "0" ]
   then
       echo "MY_APP starting..."
       sudo /home/pi/my_app/my_app.sh &
   else
       echo "MY_APP not started (autostart reserved to tty1)"
   fi
fi

Ce bout code contient un petit plus!

En effet, il vérifie si le script my_app.sh n'est pas déjà en cours d'exécution avant de le lancer.

Ensuite, le script vérifie que l'on est bien sur le terminal 1 (tty1) avant de lancer le script... cela évite de lancer le script lors d'une connexion ssh (utilisé pour prendre le contrôle à distance).

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.