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

Linux Discussion :

Commande python pour pilotage machine linux


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2021
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2021
    Messages : 128
    Par défaut Commande python pour pilotage machine linux
    Bonjour,

    Je cherche à comprendre pourquoi je n'arrive pas à lancer une commande python depuis un serveur nodejs. Je précise le schéma :

    J'ai un serveur nodejs qui propose une petite interface avec des boutons qui permettent d'activer des commandes python.
    Les commandes python ont toutes été testées manuellement et elles fonctionnent toutes. Ces commandes sont :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    os.system('sshpass -p\'gc\' ssh root@10.0.20.11 "reboot -f" &')
    os.system('sshpass -p\'gc\' ssh root@10.2.10.11 "poweroff now" &')
    Les codes sont tous bien paramétrés en terme de droits ( chmod +x code.py )

    Le code nodejs semble bien paramétré car certains code python s'exécutent bien. Voici un extrait du code nodejs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    		 if(name=="reboot"){
    			if (state_reboot ==0 & state_stop ==0 & state_start ==0 & state_cleanup ==0){
    			spawn('python', ['/home/radxa/server_alert/public/reboot.py']); 		//ici on lance le script reboot
    			console.log("reboot : commande lancée")
    			state_reboot=1;
    			setTimeout(()=>{
    				state_reboot=0
    				io.emit('etatreboot',state_reboot);
    				}, 25000)
    			}
    			io.emit('etatreboot',state_reboot);
    		 }
    Par ailleurs lorsque j'appuie sur le bouton (donc depuis nodejs), et en parallèle j'ai le htop qui tourne, je vois bien mon script qui apparaît dans la liste des taches, par contre les commandes contenues dans ce script os.system('sshpass ... ne se lancent pas --> pas visibles dans le htop, et la je ne comprends pas pourquoi.

    Je ne sais pas si j'ai été assez explicite.

    Merci pour votre aide.

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 128
    Billets dans le blog
    149
    Par défaut
    Bonjour,

    Il pourrait que cela provienne d'un problème de droit (le serveur nodejs n'utilise pas l'utilisateur habituel et pourrait ne pas avoir les droit pour faire ça), ou un problème de chemin courant (le serveur nodejs n'exécute pas la commande depuis le dossier attendu et donc, la commande ne se lance pas).
    Vous devriez faire en sorte de voir les erreurs des commandes lancées et d'ajouter des logs, pour savoir ce qui se passe.
    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
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    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 323
    Par défaut
    bonjour
    Citation Envoyé par erwannoo Voir le message
    Les commandes python ont toutes été testées manuellement et elles fonctionnent toutes. Ces commandes sont :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    os.system('sshpass -p\'gc\' ssh root@10.0.20.11 "reboot -f" &')
    os.system('sshpass -p\'gc\' ssh root@10.2.10.11 "poweroff now" &')
    Je ne sais pas si j'ai été assez explicite.
    pas pour moi

    Si j'ai compris…
    Tu as testé en local ces 2 commandes MAIS en bash, elles fonctionnent : le serveur réagit bien.
    OUI ? Donc, ici, ton seul problème et en local, ton code python os.system() qui ne fonctionne pas ?

    Perso, je n'ai jamais utilisé os.system() mais plutôt subprocess (et popen() puisque tu ajoutes & qui sans doute ne fonctionne pas avec ta commande os.system())

    Note: existe en python des bibliothèques ssh client comme paramiko

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2021
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2021
    Messages : 128
    Par défaut
    Bonjour,

    Merci pour vos réponses.
    Afin d'être plus explicite,

    Quand je me connecte à ma carte, en SSH et que j'execute la commande :

    python reboot.py

    avec le code python :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import os
    import time
     
    print(" reboot RTC ")
    os.system('sshpass -p\'mdp\' ssh root@192.168.10.11 "reboot -f" &')
    time.sleep(2)
    os.system('sshpass -p\'mdp\' ssh root@192.168.10.12 "reboot -f" &')
    time.sleep(2)
    alors les 2 PC redémarrent. Donc à partir de ce constat je me dis que le code est plutôt correct. Je fait le même test avec un autre code qui permet de démarrer les PC, en utilisant le wake on lan et qui fonctionne aussi (et pareil avec un code d'arrêt). Tous ces codes en python.

    Du coup j'intègre ces codes à mon interface qui utilise le nodejs. Et je teste. Les codes ne donnent rien pour les commande de reboot et d'arrêt, par contre, quand j'arrête manuellement les PC et que j'execute le code de démarrage, alors les PC démarrent. J'en conclus donc que mon utilisation du nodejs est plutôt bonne. Par ailleurs lorsque j'utilise le nodejs pour lancer la commande de reboot, et qu'en parallèle je regarde dans le htop, je vois bien le processus lié se lancer, donc cela confirme qu'il n'y a pas d'erreur d'adresse, ou autre, par contre les actions associées ( reboot ) ne s'effectuent pas.. et c'est bien ça mon problème..

    Si effectivement c'est un problème de droits lié a l'utilisateur nodejs, ce qui pourrait effectivement être le cas, comment gérer cela ? Je lance automatiquement le nodejs via un service depuis systemctl :
    Devrais-je y ajouter un utilisateur specifique ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    --------sudo nano nodejs.service :
     
    [Unit]
    Description=nodejs
    Wants=network-online.target
    After=network-online.target
     
    [Service]
    Type=simple
    ExecStart= /home/radxa/server_alert/autostart_indexjs.sh
    Restart=always
     
    [Install]
    WantedBy=multi-user.target
    cela lance un script bash qui lance le nodejs- :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #!/bin/bash
    cd /home/radxa/server_alert
    node index.js
    Merci pour vos réponses.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2021
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2021
    Messages : 128
    Par défaut commande python pour pilotage machine linux
    N'y aurait-t'il un moyen de définir sous quel utilisateur se lance l'application nodejs ? a partir de systemctl ? je ne sais pas.

    Merci.

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2021
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2021
    Messages : 128
    Par défaut Commande python pour pilotage machine linux
    bonjour,

    en recherchant, j'ai trouvé run truc intéressant : les cibles par défaut.

    Mes différentes applications (services) sont lancées automatiquement au démarrage de la carte par systemctl. Il s'avère que quand je tape la commande : systemctl get-default cela me retourne "graphical.target" .

    Est-ce que cela peut impacter l'exécution du service nodejs ?

    J'ai donc redéfini la cible en tapant : sudo systemctel set-default multi-user.target

    On verra ce que cela donne.
    Si vous avez des idées, remarques, je suis preneur.

    Merci.

  7. #7
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2021
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2021
    Messages : 128
    Par défaut
    Bah en fait le fait de modifier "systemctl get-default" ne règle pas mon soucis.

    Cela supprime l'affichage du bureau au démarrage.

Discussions similaires

  1. un windows XP comme serveur ntp pour des machines Linux
    Par pcouas dans le forum Windows XP
    Réponses: 5
    Dernier message: 06/01/2012, 10h42
  2. Commande DOS pour renommer une machine
    Par doski dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 15/11/2010, 15h02
  3. Une version de linux pour une machine assez ancienne.
    Par Muesko dans le forum Distributions
    Réponses: 8
    Dernier message: 06/07/2006, 17h37
  4. Configurer machine linux pour backup/restore
    Par Sendo dans le forum Administration système
    Réponses: 3
    Dernier message: 12/05/2006, 13h43

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