Forum Programmation.php Application Clonezilla

Posté par  . Licence CC By‑SA.
Étiquettes : aucune
0
7
mai
2014

Bonjour,

Je suis actuellement entrain de développer une application web(HTML-PHP) pour un serveur de déploiement d'image: Clonezilla.
Pendant le développement de cette application, je me heurte à un problème.
Certaines de mes commandes sont bien exécutée:
Exemple: la commande d’arrêt du serveur:

sudo drbl-ocs stop

Mais d'autres commandes, lorsqu' elles sont exécutée, ne fonctionne pas. La page web indique "attente du serveur" et rien ne se passe:

sudo drbl-ocs -b -g auto -e1 auto -e2 -r -x -j2 -p poweroff --cli    ents-to-wait 32 -l fr_FR.UTF-8 startdisk multicast_restore image_a_restaurer sda

Voici le code de la page:

<?PHP
    $commande="sudo drbl-ocs -b -g auto -e1 auto -e2 -r -x -j2 -p poweroff --cli    ents-to-wait 32 -l fr_FR.UTF-8 startdisk multicast_restore image_a_restaurer sda";
    $commande2="ls /var/log/clonezilla";
    $commande3="sudo drbl-ocs stop";
    exec  ($commande,$out, $return);
    echo "----------------------RES commande---------------------<br>";
    foreach ($out as $key2 => $scal2) {echo "[$key2] => $scal2<br>";}
    echo "------------------FIN RES commande---------------------<br>";
    echo "<br>Valeur de retour: $return";
    ?>
  • # timeout

    Posté par  . Évalué à 2.

    ta commande avec stop a une execution tres courte, donc pas de souci.

    ton autre commande, si je me souviens bien, demande de restaurer le disque à partir de l'image.
    et sauf si ton disque est une clef USB de quelques Go, avec une image assez petite, ca prend du temps

    ton script PHP attend donc que la commande se termine…

    • [^] # Re: timeout

      Posté par  . Évalué à 1. Dernière modification le 11 mai 2014 à 18:34.

      Portant quand j'exécute la commande dans un terminal:

      sudo drbl-ocs -b -g auto -e1 auto -e2 -r -x -j2 -p poweroff --clients-to-wait 32 -l fr_FR.UTF-8 startdisk multicast_restore image_a_restaurer sda

      L'exécution de celle ci ne met qu'une dizaines de seconde tout au plus.

      Sinon existe t-il un autre moyen pour exécuter cette commande par l'intermédiaire de php?

      • [^] # Re: timeout

        Posté par  . Évalué à 2.

        et ton sudo demande un mot de passe ?

        sudo drbl-ocs -b -g auto -e1 auto -e2 -r -x -j2 -p poweroff --clients-to-wait 32 -l fr_FR.UTF-8 startdisk multicast_restore image_a_restaurer sda

        si c'est le cas, ton script php attend que tu lui donne le mot de passe,
        il faut alors configurer sudo pour te laisser executer sudo depuis l'utilisateur www-data (celui du serveur web) sans demander de mot de passe.

        • [^] # Re: timeout

          Posté par  . Évalué à 1.

          Quand j'exécute la commande aucun mot de passe n'est demandé.
          J'avais déjà rajouter les droits pour www-data dans /etc/sudoers

          www-data ALL=(ALL) ALL
          %sudo ALL=NOPASSWD: ALL

          • [^] # Re: timeout

            Posté par  . Évalué à 2.

            www-data appartient-il au groupe sudo ?

            car tel que tu as configuré le fichier sudoers,
            seuls les utilisateurs du groupe sudo peuvent executer une commande sans devoir entrer leur mot de passe.

            • [^] # Re: timeout

              Posté par  . Évalué à 1.

              Oui www-data fait parti du groupe sudo, je l'ai ajouté.

              Je pense avoir trouvé le problème:
              Quand j'exécute la commande de démarrage du serveur en php,
              drbl-ocs -b -g auto -e1 auto -e2 -r -x -j2 -p poweroff --clients-to-wait 20 -l fr_FR.UTF-8 startdisk multicast_restore image_de_test sda

              l'exécution de la page ne se termine pas.

              J'ai lancé la commande dans un terminal avec l'utilisateur qui gère l'application, je me suis aperçut qu'à la fin de l'exécution il fallait que j'appuie sur la touche entrée pour retrouver mon prompt.

              Je pense que le souci viens de là. Mais je ne sais pas comment faire en sorte de modifier cela.

              • [^] # Re: timeout

                Posté par  . Évalué à 2.

                pour envoyer un retour chariot apres la commande il suffit de faire

                command;echo "\n"
                pour l'envoyer quelque soit le resultat de command

                command && echo "\n"
                pour l'envoyer si command s'est bien executée

                command || echo "\n"
                pour l'envoyer si command a echoué

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.