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 NeoX . É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 crashpon . Évalué à 1. Dernière modification le 11 mai 2014 à 18:34.
Portant quand j'exécute la commande dans un terminal:
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 NeoX . Évalué à 2.
et ton sudo demande un mot de passe ?
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 crashpon . É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
[^] # Re: timeout
Posté par NeoX . É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 crashpon . É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 NeoX . É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.