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

Shell et commandes GNU Discussion :

Exécuter un .sh pour activer un environnement virtuel


Sujet :

Shell et commandes GNU

  1. #21
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 201
    Points : 4 665
    Points
    4 665
    Par défaut
    Citation Envoyé par Gregory_007 Voir le message
    Désolé papajoker, je ne suis pas sur d'avoir compris ce que tu me demande.
    J'ai ajouté la ligne
    dans bateau.sh
    Si je redémarre, je ne vois rien
    Oui, on ne se comprend pas, bien sûr qu'il ne faut pas faire un source dans ton cron.
    ps: la sortie que tu m'a donnée était en utilisant source ton_script ? c'est donc normal que cela ne fonctionne pas ! ce qui est intéressant c'est de lancer normalement le script ! uniquement le test 2 était bon et méritait le retour de la sortie.
    @N_BaH ok oui, j'ai (enfin) vu le problème


    Et normal de ne rien voir avec cron, il faut rediriger la sortie vers un fichier ! Le résultat de la commande est alors dans ce fichier (a la fin)
    genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @reboot /truc/machin/ton_script.sh >> /truc/machin/cron.log
    Et je me rend compte que je t'ai donné trop (infos/code) car tu ne comprends rien à bash et je t'ai noyé (désolé)

    je viens de faire le test dans un cron, le script python s'exécute bien, et j'ai en sortie du script bash
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /home/patrick/workspace/python/test/run.sh
    Directory: /home/patrick/workspace/python/test
    /root
     
    ...
    Current installation scheme: "venv"
     
    Paths: 
    	data = "/home/patrick/workspace/python/test/.venv"
    	include = "/usr/include/python3.12"
    	platlib = "/home/patrick/workspace/python/test/.venv/lib/python3.12/site-packages"
    	platstdlib = "/home/patrick/workspace/python/test/.venv/lib/python3.12"
    	purelib = "/home/patrick/workspace/python/test/.venv/lib/python3.12/site-packages"
    	scripts = "/home/patrick/workspace/python/test/.venv/bin"
    Sans cron ou avec, j'ai la même chose (c'est le but) sauf avec cron, j'ai "/root" comme répertoire par défaut (sans intéret)
    $moi= ( !== ) ? : ;

  2. #22
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 46
    Points : 18
    Points
    18
    Par défaut
    Finalement, c'est quoi le problème ? pourquoi cela ne fonctionne pas ? Je fais la même chose que les exemples sur internet. Pourquoi dans mon cas, cela ne démarre pas ?

    Je ne sais même pas quoi chercher....

  3. #23
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 46
    Points : 18
    Points
    18
    Par défaut
    J'ai pu avancer en essayant autre chose. j'ai créé un script python qui exécute une commande subprocess
    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
    24
    25
    26
    27
     
    import subprocess
    import time
    import os
     
    def DIRECTION(DIR):
        os.chdir(DIR)
     
    def COMMAND_SUBPROCESS(CMD, DEBUG = False):
        cmd = CMD.split(' ')
        print(cmd)
        try :
            process = subprocess.run(cmd, check=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE)
        except :
            pass
        try:
            process = subprocess.run(cmd, check=True, stderr=subprocess.PIPE, stdout=subprocess.PIPE, capture_output = True, text = True)
        except :
            pass
        if DEBUF:
            print(process)
     
    DIRECTION('/home/iot_devices')
    CMD = 'source .venv/bin/activate; python3 CAPTEURS.py &'
    subprocess.call(CMD,shell=True,executable='/bin/bash')
    CMD = 'source .venv/bin/activate; python3 UTILISATEURS.py'
    subprocess.call(CMD,shell=True,executable='/bin/bash')
    Comparativement aux autres solutions, il se passe quelque chose. Les deux scripts CAPTEUR.py et UTILISATEURS.py sont démarrés. J'ai pu le vérifier de 2 façons :

    #1 en me connectant au SSH, je ne peux plus démarrer les scripts :
    * Serving Flask app 'UTILISATEURS'
    * Debug mode: off
    Address already in use
    Port 5000 is in use by another program. Either identify and stop that program, or start the server with a different port.
    #2 je les retrouve dans les processus actifs avec ps -ef

    #3 Dans le script CAPTEURS.py, j'utilise une commande mqtt pour que le script me retourne une valeur. Cela fonctionne.

    La seule chose qui ne fonctionne pas c'est que dans mes 2 scripts, j'appelle un autre script DATABASES qui me permet d'enregistrer des données mysql. Cette partie ne fait pas ce qu’elle doit faire.

    J'ai aussi remarqué qu'en démarrant les scripts manuellement et ensuite en fermant la connexion ssh, les scripts s'arrêtent !!

    Aviez-vous une idée pourquoi ?

  4. #24
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 201
    Points : 4 665
    Points
    4 665
    Par défaut
    Citation Envoyé par Gregory_007 Voir le message
    Finalement, c'est quoi le problème ?
    Je te l'ai déjà dit !
    - Tu inventes des commandes
    - Tu ne retournes pas ici le retour du script

    Comme indiqué depuis le début, ce script bash n'existe que pour valider le coté bash et être sûr d'être dans l'environnement python désiré (il suffit de lire la sortie!)

    La seule fois ou tu retournes une sortie, tu inventes une commande "source lescript.sh"
    Et lorsque tu lances véritablement le script ... aucun retour, juste "ca marche pas" : c'était déjà ce que tu disais à ton premier message (on ne risque pas d'avancer)
    Et puisque ça marche pas, tu trouves le moyen de modifier le script bash pour qu'il ne fonctionne pas

    Citation Envoyé par Gregory_007 Voir le message
    Finalement, c'est quoi le problème ?
    - Tu ne fais pas la bonne commande dans ton terminal ...
    - Pas de retour ici, donc aucun risque que l'on t'aide
    - Tu sabotes volontairement le script ...

    Voilà, tu as la réponse.

    Citation Envoyé par papajoker Voir le message
    ps: si environnement virtuel mal configuré (manque une lib dedans) ou script python mauvais, c'est une autre histoire. Mais au moins, tu sais si ton script bash est bon ou non.
    Lorsque je t'ai donné le source du bash, j'ai été extrêmement clair, le bash ne va certainement corriger un mauvais code python
    Tu as écrit le code python ? puisque le bash est "passable", avoir aussi des erreurs dans python ne me surprendrait pas.


    J'ai pu avancer en essayant autre chose. j'ai créé un script python
    Pourquoi parler d'avancée ? En fait c'est comment remplacer une chose simple pour une usine à gaz codée avec les pieds ! Et qui n'apporte strictement rien (sinon de la complexité ?).
    J'espère que tu débutes tout juste en python ou que c'est codé par une IA. Si c'est une IA, il faut la mettre à la poubelle.
    https://docs.python.org/fr/3/library...high-level-api
    Citation Envoyé par doc_de_python
    Ancienne interface (API) haut-niveau
    Avant Python 3.5, ces trois fonctions représentaient l'API haut-niveau de subprocess.
    python 3.5 c'était en 2015, soit tu es un vieux(expérimenté) codeur python, soit ton IA a 10 ans d'age pour utiliser un truc obsolète depuis 10 ans.
    Et ... inventer un paramètre executable= à passer à cette fonction call(), il faut faire fort
    Et merci pour la fonction "COMMAND_SUBPROCESS" que heureusement tu n'utilises pas

    j'appelle un autre script DATABASES qui me permet d'enregistrer des données mysql
    En python normalement on inclut un module !!!! et si tu fais un appel à un fichier, alors, même problème qu'avec bash (comme tout autre langage). On n'utilise pas de chemin relatif par rapport à un truc non déterminé à l'avance Et devoir faire un "cd" avant le script c'est un pis-aller à un mauvais code (et flemme de modifier son code)
    Pour ceci, je te signale, que j'avais prévu que ton code python pouvais être aussi mauvais, c'est pour cela que j'avais mis en commentaire dans le bash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #cd "$current"  # optionel ?
    A décommenter si le bash retourne les bonnes infos mais que python plante mais puisque tu n'as jamais donné le moindre retour...





    DATABASES qui me permet d'enregistrer des données mysql.
    Pourquoi utiliser cron ? qui me dit que mysqld est lancé ? (encore un plantage python potentiel...)
    systemd est ton ami
    $moi= ( !== ) ? : ;

  5. #25
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 46
    Points : 18
    Points
    18
    Par défaut
    Papajoker, merci pour tes commentaires, mais cela ne m'aide pas. Dire je te l'ai déjà dit, si je ne fais pas la bonne chose c'est que je n'ai pas compris ou que la réponse n'est pas claire. Cela va faire plus d'une semaine que je cherche et que je n'y arrive pas. Donne-moi la réponse si tu la connais stp.

    Concernant les commandes, comment expliques-tu que si je le lance manuellement, tout fonctionne ? Pas d'erreurs ! Donc le problème ne vient pas du côté python. Ça, je le dis depuis le début.

    J'utilise Python3.12 et non 3.5 comme tu dis.

    DATABASE est un script que j'ai créé contenant une class que j'utilise et qui fonctionne.

    Pourquoi j'utilise crontab ? Propose-moi autre chose. Je suis ouvert aux suggestions.

    Je ne fais pas d'appel de fichier.

    Non, je ne début pas en Python, loin de là, mais je début avec un serveur vps qui ne démarre pas les scripts au démarrage.

    Bash et autre code proposé ne sont pas du Python mais du Linux.

    Merci de m'aider à régler mon problème, je suis ouvert aux suggestions, clair et précise qui me permettront de comprendre.

    PS: je viens de voir que tu avais fait une réponse en #21. Je vais essayer. Merci

  6. #26
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 201
    Points : 4 665
    Points
    4 665
    Par défaut
    Citation Envoyé par Gregory_007 Voir le message
    c'est que je n'ai pas compris ou que la réponse n'est pas claire. Cela va faire plus d'une semaine que je cherche et que je n'y arrive pas. Donne-moi la réponse si tu la connais stp.
    ??? ton premier message :
    Citation Envoyé par Gregory_007 Voir le message
    Je dois pouvoir exécuter mon script au démarrage:
    crontab -e
    @reboot /home/iot_devices/demarrer_script.sh
    Je te file un script sh et tu n'as qu'a faire ce que tu demandais : /home/iot_devices/demarrer_script.sh (pas depuis ce répertoire `iot_devices/` !)
    2 pages et toujours pas de réponses
    Entre temps tu fais plein d'autres choses au hasard et puisque je n'ai pas demandé, ne m'intéresse aucunement et ne fait rien avancer.

    Citation Envoyé par Gregory_007 Voir le message
    Concernant les commandes, comment expliques-tu que si je le lance manuellement, tout fonctionne ? Pas d'erreurs ! Donc le problème ne vient pas du côté python. Ça, je le dis depuis le début.
    Depuis le début je te répète la meme chose:
    - premièrement il faut valider le lanceur (en bash)
    - si il passe c'est donc bien un problème python et comme dit plus haut, tu peux très bien avoir simplement le même problème en python : il faut absolument être dans le répertoire. Je ne connais pas ton code python, donc il est absurde de jeter la faute sur le bash ou python : il faut en premier lieu valider le bash pour avoir une idée du problème. Puisque pour l'instant tu te refuses à faire les choses par étape, tu te retrouves à faire des magouilles au hasard sans avoir aucune idée du problème.

    Citation Envoyé par Gregory_007 Voir le message
    Pourquoi j'utilise crontab ? Propose-moi autre chose. Je suis ouvert aux suggestions.
    Blague ! c'est dans ma phrase. Mais c'est comme ce que tu fais, il ne faut pas aller trop vite, pour l'instant tu ne le lances pas au boot. Il faudra y penser seulement par la suite.
    ps: il est possible que cron se lance en dernier ? et donc pas de problème de ce coté.
    je début avec un serveur vps qui ne démarre pas les scripts au démarrage.
    Donc tu as un non-linux qui vient d'une autre planete. Même ton linux en desktop le fait. Ton serveur lance bien mysqld au démarrage

    Citation Envoyé par Gregory_007 Voir le message
    clair et précise qui me permettront de comprendre.
    Te donner un script et de le lancer selon ce que tu désirais ne me semble pas difficile à comprendre

    Je le répete pour la centième fois, si il fonctionne (hors cron) il y a 99,9% que ton problème est coté python
    $moi= ( !== ) ? : ;

  7. #27
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 46
    Points : 18
    Points
    18
    Par défaut
    Merci encore une fois papajoker.

    Je vais prendre le temps de relire ce qui a été dit dans les différents messages avec la solution que je n'ai pas su percevoir.

    Merci pour ton aide

  8. #28
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2011
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 46
    Points : 18
    Points
    18
    Par défaut
    Finalement, j'ai trouvé le problème.

    Une partie de mon code fonctionnait au démarrage et totalement quand je le faisais manuellement. Cela n'avait rien à voir avec l'environnement virtuel ou .sh mal configuré.

    Mes scripts python au démarrage faisaient des requêtes aux services mysql, mais celui-ci n'était pas encore démarré.

    Merci pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/03/2023, 17h31
  2. Comment activer environnement virtuel dans VS Code
    Par OZ1977 dans le forum Visual Studio
    Réponses: 1
    Dernier message: 13/04/2021, 14h16
  3. Réponses: 25
    Dernier message: 02/06/2010, 10h29
  4. Réponses: 0
    Dernier message: 10/05/2010, 13h19

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