IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Raspberry Pi Discussion :

Impossible de lancer plusieurs programmes au démarrage


Sujet :

Raspberry Pi

  1. #1
    Membre du Club Avatar de dodineau
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 98
    Points : 50
    Points
    50
    Par défaut Impossible de lancer plusieurs programmes au démarrage
    Bonjour tout le monde.
    J'ai modifié mon fichier /etc/rc.local pour lancer 2 programmes python au démarrage de mon Raspberry PiZero.
    Le 1er programme se lance toujours mais jamais le 2ème.
    Voici mon rc.local :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #!/bin/sh -e
    #
    # rc.local
    #
    # This script is executed at the end of each multiuser runlevel.
    # Make sure that the script will "exit 0" on success or any other
    # value on error.
    #
    # In order to enable or disable this script just change the execution
    # bits.
    #
    # By default this script does nothing.
    
    # Print the IP address
    _IP=$(hostname -I) || true
    if [ "$_IP" ]; then
      printf "My IP address is %s\n" "$_IP"
    fi
    
    python3 /var/www/html/thermostat/temp.py
    python3 /var/www/html/thermostat/bme.py
    
    exit 0
    J'ai essayé d'inverser la liste et c'est toujours le 1er de la liste qui se lance sans le 2ème.
    Merci pour votre aide.
    A+
    Je ne suis ni pour ni contre, bien au contraire...

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Oui, car dans le script que vous proposez, vous indiquez au shell d'attendre la fin du programme avant de continuer.
    Expérimentez avec :
    et
    Le premier est similaire à votre script. Le second indique que le sleep doit être fait en fond et que le shell n'a pas besoin d'attendre pour continuer.

    * mon exemple n'est pas parfait et on aurait pu faire un meilleur exemple.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre du Club Avatar de dodineau
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 98
    Points : 50
    Points
    50
    Par défaut
    Bonjour et merci pour cette réponse.
    Je ne vois pas bien où insérer les modifications.
    Avant mes commandes python, au milieu ou après ?
    Merci.
    Je ne suis ni pour ni contre, bien au contraire...

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    L'astuce est d'insérer un '&' à la fin de la commande pour laquelle vous ne voulez pas attendre la fin de son exécution.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre du Club Avatar de dodineau
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 98
    Points : 50
    Points
    50
    Par défaut
    J’ai mis cette ligne mais ça fait toujours pareil.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    python3 /var/www/html/thermostat/temp.py & python3 /var/www/html/thermostat/bme.py
    Je ne suis ni pour ni contre, bien au contraire...

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    J'aurais écris cela comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    python3 /var/www/html/thermostat/temp.py & 
    python3 /var/www/html/thermostat/bme.py
    Mais cela revient au même. Dans ce cas, il va exécuter temp.py, sans attendre la fin, puis bme.py et attendre que bme.py finisse.
    Pour enlever toute attente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    python3 /var/www/html/thermostat/temp.py & 
    python3 /var/www/html/thermostat/bme.py &
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Membre du Club Avatar de dodineau
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 98
    Points : 50
    Points
    50
    Par défaut
    J'avais aussi essayé ces 2 autres solutions mais ça n'y fait rien, je n'ai que le 1er qui se lance.
    Je me pose une question sur mes programmes qui sont des boucles sans fin, peut-être est-ce la cause de l'impossibilité de lancer le 2eme ???
    Je ne suis ni pour ni contre, bien au contraire...

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Si ce sont des boucles sans fin, j'ai peur que cela ne fonctionne plus, une fois le script rc.local terminé.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  9. #9
    Membre du Club Avatar de dodineau
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 98
    Points : 50
    Points
    50
    Par défaut
    Oui ce sont 2 boucles sans fin.
    Seul le 1er programme peut donc démarrer à mon avis.
    J'ai donc fais un modif de mes 2 programmes pour n'en faire qu'un et ça fonctionne comme ça.
    En tous cas merci pour le temps passé à m'aider.
    Je ne suis ni pour ni contre, bien au contraire...

  10. #10
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut à tous.

    Au lieu de faire les appels dans le fichier "rc.local", créez deux services.
    Cela reviendra au même et vous pourrez mieux gérer vos boucles infinies.

    Cordialement.
    Artemus24.
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  11. #11
    Membre du Club Avatar de dodineau
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 98
    Points : 50
    Points
    50
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Salut à tous.
    Au lieu de faire les appels dans le fichier "rc.local", créez deux services.
    @+
    Bonjour,
    Je suis débutant et je ne sais pas comment créer des services.
    La solution du rc.local n'est sûrement pas la meilleure mais pour ce que je demande ça fonctionne.
    Peut-être avez-vous des éclaircissements sur la création d'appels ?
    Merci.
    Je ne suis ni pour ni contre, bien au contraire...

  12. #12
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 381
    Points : 19 065
    Points
    19 065
    Par défaut
    Salut dodineau.

    J'ai fait le test avant de te donner la solution, car habituellement, je n'utilise pas python.

    Le but est de créer un service qui va se relancer toutes les cinq secondes.
    Celui-ci va déclencher un programme python qui va écrire l'heure dans un fichier log.

    Voici le service "python-test.service" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [Unit]
    Description=Python Test Program
    After=syslog.target multi-user.target
    
    [Service]
    Type=simple
    User=root
    ExecStart=/usr/bin/python3      /warehouse/Prog_Python/05.Service/test.py
    Restart=always
    RestartSec=5
    
    [Install]
    WantedBy=multi-user.target
    Voici le programme "test.py" :
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    #!/usr/bin/python3
     
    import sys, datetime
     
    class Logger:
            def __init__(self, filename):
    #               self.console=sys.stdout
                    self.file=open(filename, 'a')
     
            def write(self, message):
    #               self.console.write(message)
                    self.file.write(message)
     
            def flush(self):
    #               self.console.flush()
                    self.file.flush()
     
    chemin = '/warehouse/Prog_Python/05.Service/fichier.log'
    sys.stdout = Logger(chemin)
     
    objet_datetime = datetime.datetime.now()
    print(objet_datetime)
     
    exit
    Comme on peut le constater, j'ai rediriger tout ce qui concerne "stdout" vers un fichier "log".

    Et pour faire mes tests, je me suis créé un programme bash.
    Cela m'évite de retaper les mêmes commandes à chaque fois.
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    #!/bin/bash
     
    SERVICE='python-test.service'
    FOLDER='/warehouse/Prog_Python/05.Service'
    DEST='/etc/systemd/system'
    USER='root'
     
    function enter
    {
            echo -e "\n\t\e[1;32mTapez 'ENTER' pour continuer..."
            read dummy
    }
     
    while true
    do
            clear
            echo -e "\t\e[1;32mPython lancé par un service\e[0m"
            echo -e "\t\e[1;32m===========================\e[0m\n"
     
            echo -e "\t\e[1;31m1\e[0m) Installation du service"
            echo -e "\t\e[1;31m2\e[0m) Suppression  du service\n"
     
            echo -e "\t\e[1;31m3\e[0m) Test         du service"
            echo -e "\t\e[1;31m4\e[0m) Redémarrage  du service\n"
     
            echo -e "\t\e[1;31m5\e[0m) Vidage du fichier log"
            echo -e "\t\e[1;31m6\e[0m) Redémarrage de la Raspberry\n"
     
            echo -e "\t\e[1;31mQ\e[0m)uit\n"
     
     
            read -p "    Votre Choix : " choice
     
            case $choice in
            1)      clear
                    echo -e "\t\e[1;32mCréation du service\e[0m"
                    echo -e "\t\e[1;32m===================\e[0m\n"
     
                    cp $FOLDER/$SERVICE     $DEST/.
     
                    chown $USER:$USER       $DEST/$SERVICE
                    chmod +x                $DEST/$SERVICE
     
                    chown $USER:$USER       $FOLDER/fichier.log
     
                    chown $USER:$USER       $FOLDER/test.py
                    chmod +x                $FOLDER/test.py
     
                    systemctl daemon-reload
                    systemctl enable $SERVICE
                    systemctl start  $SERVICE
                    ;;
     
            2)      clear
                    echo -e "\t\e[1;32mSuppression du service\e[0m"
                    echo -e "\t\e[1;32m======================\e[0m\n"
     
                    systemctl stop    $SERVICE
                    systemctl disable $SERVICE
     
                    rm                      $DEST/$SERVICE
                    ;;
     
            3)      clear
                    echo -e "\t\e[1;32mEtat du service\e[0m"
                    echo -e "\t\e[1;32m===============\e[0m\n"
     
                    systemctl status $SERVICE
                    ;;
     
            4)      clear
                    echo -e "\t\e[1;32mRedémarrage du service\e[0m"
                    echo -e "\t\e[1;32m======================\e[0m\n"
     
                    systemctl restart $SERVICE
                    ;;
     
            5)      clear
                    echo -e "\t\e[1;32mVidage du fichier log\e[0m"
                    echo -e "\t\e[1;32m=====================\e[0m\n"
     
                    cat /$FOLDER/fichier.log
                    ;;
     
            6)      clear
                    echo -e "\t\e[1;32mRedémarrage de la Raspberry\e[0m"
                    echo -e "\t\e[1;32m===========================\e[0m\n"
     
                    reboot
                    ;;
     
            q)      clear
                    break
                    ;;
     
            *)      echo -e "\e[1;32mMauvais Choix !\e[0m"
                    read dummy
                    continue
                    ;;
            esac
            enter
    done
    exit
    J'ai créé un répertoire de travaille où j'ai mis mes quatre fichiers.
    Tu changeras le chemin vers ce répertoire et tu mettra le tien.

    J'ai test avec le compte "root", ainsi qu'avec le compte "pi" et ça fonctionne !
    Pour les autorisations, tout se trouve dans le "bash".

    La consigne est de mettre un service par programme.
    La boucle infinie, au lieu de la faire dans le programme python, j'ai préféré la mettre dans le service
    J'ai indiqué un redémarrage toutes les 5 secondes après la fin de la dernière session.
    Cela permet de libérer de la ressource au lieu de fair un "sleep()" où je ne sais quoi d'autre qui consommerait du temps CPU.
    Et la trace du déroulement se trouve, bien sûr, dans le fichier log. L'écriture se fait à la fin du fichier.

    Bonne amusement !

    Cordialement.
    Artemus24.
    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

Discussions similaires

  1. Lancer un programme au démarrage
    Par Mehdipepper dans le forum Autres Logiciels
    Réponses: 6
    Dernier message: 21/05/2006, 07h12
  2. Lancer un programme au démarrage de windows
    Par jejeb dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 25/03/2006, 21h32
  3. [SOLARIS] lancer un programme au démarrage
    Par gangsoleil dans le forum Solaris
    Réponses: 2
    Dernier message: 01/12/2005, 22h11
  4. Comment lancer un programme au démarrage de Windows ?
    Par nesquik dans le forum API, COM et SDKs
    Réponses: 2
    Dernier message: 29/07/2005, 17h48
  5. Lancer un programme au démarrage
    Par ludo_7 dans le forum Windows
    Réponses: 7
    Dernier message: 09/10/2003, 16h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo