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

PHP & Base de données Discussion :

gestion d'un serveur à distance


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 2
    Points : 2
    Points
    2
    Par défaut gestion d'un serveur à distance
    Bonjour,
    j'ai vraiment besoin d'aide parce que je suis en train chercher un moyen de contrôler un serveur distant au travers d'un page php.
    j'ai fait un système d'alerte(avec des feux tricolores pour donner l'état du serveur. en fait l'idée c'est de pouvoir en appuyant sur bouton start, envoyer la commande appropriée et afficher en même temps l'état du serveur. donc il me faut deux processus j'imagine. donc le premier pour lancer la commande en background et le second pour afficher l'état du serveur.
    ce que j'ai fait actuellement c'est de lancer des commandes dos test(avec shell_exec, exec) mais la page php attend la fin de l’exécution de la commande avant de continuer. s'il y a des idées ou mieux pour m'aider à arriver à mes fins, je suis preneur.
    voici mon code qui fait la simulation de l'état du serveur.
    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
    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
     
    <?php
    include "head.php";
    ?>
     
    <script>
     
    function setState(){
    		document.getElementById("mes_feux").style.backgroundImage = 'url("img/feux_vert.jpg")';
    }
     
    function start(valeur)
    {
    	if(valeur==1)
    	{
    		document.getElementById("mes_feux").style.backgroundImage = 'url("img/feux_rouge.jpg")';
    	}
    	else
    	if(valeur==0)
    	{
    	  document.getElementById("mes_feux").style.backgroundImage = 'url("img/feux_orange.jpg")';
    	  setTimeout(setState, 6000);
    	}
    }	
    </script>
     
    <form action="servers_administration.php" method="post" name="formulaire">
    	<table>
    	<thead>
    		<th>
    			Server
    		</th>
    		<th>
    			Command
    		</th>
    		<th>
    			Status
    		</th>
    	</thead>
    		<tr>
    			<td>
    				<input type="radio" name="server" value="lum1" onClick="" <?php if (isset($_POST["server"]))
    																								if($_POST["server"]=="lum1"){?>
    																										checked="checked"<?php }?>/>lum1<br>
    				<input type="radio" name="server" value="lum4" onClick="" <?php if (isset($_POST["server"]))
    																								if($_POST["server"]=="lum4"){?>
    																										checked="checked"<?php }?>/>lum4<br>
    			</td>
    			<td style="background-color:#FFFFFF;" align=right>
    				<input type="radio" name="feux" value="R" onClick="start(1);" <?php if (isset($_POST["feux"]))
    																								if($_POST["feux"]=="R"){?>
    																										checked="checked"<?php }?>/>stop<br>
    				<input type="radio" name="feux" value="V" onClick="start(0);" <?php if (isset($_POST["feux"]))
    																								if($_POST["feux"]=="V"){?>
    																										checked="checked"<?php }?>/>start<br>
    				<input name="other" type="button" value ="Other commands" onClick="">
    			</td>
     
    			<?php 
    				$init = 0;
    				$choix  = "";
    						if(isset($_POST["feux"])&&(!isset($_GET['val'])))
    						$choix = $_POST["feux"];	
    			?>
    			<td style="background-color:#FFFFFF;">
    				<div id="mes_feux" style="height:150px; width:50px; background-image:url('img/feux.jpg')>">									
    				</div>
    			</td>
     
    		</tr>
    	</table>
    </form>
     
    <?php
    include "foot.php";
    ?>
    merci d'avance.

  2. #2
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Bonjour,

    C'est bien exec qu'il faut utiliser, mais il faut lancer le processus en tache de fond : (exemple sous linux)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec(sprintf("%s > %s 2>&1 & echo $! >> %s", $cmd, $outputfile, $pidfile));
    L'important est de bien recuperer le process id pour pouvoir ensuite definir son etat.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function isRunning($pid){
        try{
            $result = shell_exec(sprintf("ps %d", $pid));
            if( count(preg_split("/\n/", $result)) > 2){
                return true;
            }
        }catch(Exception $e){}
     
        return false;
    }
    Si le processus ne tourne plus, la reponse se trouve dans l'output

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    merci théocrite pour ton coup de main,
    je voulais par ailleurs que tu me donne quelques explications s'il te plait. dans la fonction sprintf je n'ai pas trop compris les redirection que tu as fait. je parle de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "%s > %s 2>&1 & echo $! >> %s"
    . je ne suis pas très bon en php alors je voulais savoir si ce code marcherais sous windows parce que le serveur en question est sous windows.
    par ailleurs, je pense qu' il me faudra faire un système d'alerte pour savoir quand le processus a fini de tourner afin de traiter l'output. si j'ai raison es que vous me conseilleriez d'utiliser une boucle while? ou bien y a t-il une façon plus appropriée de savoir si le processus est encore en train de tourner. en fait toute suite je pense à un while mais je me dis qu'il sera bloquant alors si vous une meilleur idée.
    en attendant ta réponse, j'essaye de bidouiller pour voir jusqu'où je peux aller.
    merci par avance: ccool:

  4. #4
    Membre éprouvé Avatar de tdutrion
    Homme Profil pro
    Architecte technique
    Inscrit en
    Février 2009
    Messages
    561
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 561
    Points : 1 105
    Points
    1 105
    Par défaut
    Alors je vais essayer de répondre dans l'ordre.

    Tout d'abord, le code que je t'ai mis est emprunté sur Stack Overflow, je n'ai même pas regardé le contexte d'execution précis, mais il donne juste une structure globale du code (faut regarder en gros).

    Ce code ne peut pas tourner sur Windows, c'est une autre syntaxe avec d'autres fonctions pour Windows.

    Pour le contenu de la fonction exec, il s'agit d'executer le script de traitement en background. Un sprintf est souvent utilisé pour créer la commande à executer, de sorte à passer les paramètres en fin de ligne et ne pas avoir à changer la syntaxe globale de la commande en cas de changement de paramètres. Le > redirigent le flux (l'output de la commande) dans le fichier spécifié au lieu de la sortie standard.

    Pour finir, un while est fortement déconseillé pour suivre l'état, car ton action sera bloquante (pas de réponse HTML avant la fin du traitement. La meilleure solution à mon gout est de laisser l'execution en background et de rendre un HTML genre veuillez patienter. Ensuite, soit tu fais des requêtes Ajax pour changer le contenu de la div veuillez patienter (réponse type JSON ou XML avec le résultat de ta tâche en background), soit tu envois un resultat avec un refresh javascript qui recharge la page à intervalles régulières. D'autres systèmes sont possibles avec des frames, et le rechargement de la frame avec les deux mécanismes cités précédemment.

    Voilà en gros pour cette partie. Je te mets des liens ci-dessous.

    PHP background task on Windows

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $WshShell = new COM("WScript.Shell");
    $oExec = $WshShell->Run("C:\wamp\bin\php\phpVERSIONNUMBER\php-win.exe -f C:/wamp/www/path/to/backgroundProcess.php", 0, false);
    from
    PHP exec() as Background process Windows Wampserver Environment

    L'idée est vraiment de laisser la tâche en fond, et de pouvoir la tester selon un ID. Je ne l'ai jamais fait sur Windows, je ne peux donc pas aider plus, sauf message d'erreur spécifique ou problème de compréhension de l'idée globale.

    Personnellement je l'ai fait pour du traitement de CSV, on upload le csv, on le traite en bg avec envoi de mail à la fin du traitement, et impossibilité d'avoir un nouvel upload si un traitement est en cours (vérification du PID stocké dans la BD).

Discussions similaires

  1. Gestion erreur SQL Serveur dans un Script VBS
    Par jayan dans le forum VBScript
    Réponses: 3
    Dernier message: 08/02/2007, 14h06
  2. peut-on redemarrer un serveur à distance
    Par TOPGUN89 dans le forum Websphere
    Réponses: 1
    Dernier message: 05/02/2007, 17h13
  3. Gestion facilitée de serveurs DNS avec bind
    Par marcha dans le forum Réseau
    Réponses: 1
    Dernier message: 17/08/2006, 15h15
  4. Réponses: 12
    Dernier message: 02/05/2006, 16h31
  5. [Tomcat 5] Accéder au serveur à distance ?
    Par Wavy dans le forum Tomcat et TomEE
    Réponses: 4
    Dernier message: 22/03/2006, 12h45

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