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

Apache Discussion :

Redémarrage d'Apache par script


Sujet :

Apache

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    528
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 528
    Par défaut Redémarrage d'Apache par script
    Bonjour,

    Je cherche en vain, une astuce, sous Windows, pour redemarrer Apache via un script qui serait lancé depuis une interface Web.
    Juste pour relancer Apache suite a des modifs de configuration.
    Sous Linux, j'avais fait un petit script perl :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #!/usr/bin/perl -w
    use warnings;
    print "Content-type: text/html\n\n";
    my $var = "sudo /etc/init.d/apache2 reload";
    system($var);
    Mais sous Windows, si quelqu'un a une idée ...

    Merci d'avance

  2. #2
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Apache est configuré en tant que service Windows ? Comment fais-tu pour démarrer Apache ?

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    528
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 528
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    Apache est configuré en tant que service Windows ? Comment fais-tu pour démarrer Apache ?
    Bonjour,
    Tout à fait d'accord avec toi, Apache est bien configuré en tant que service, et soit je passe par le gestionnaire de service pour l'arreter ou le redemarrer, ou bien je psse par le monitor d'apache.
    En ouvrant une fenetre DOS et en tapant la commande ">httpd -k restart" ça fonctionne aussi, mais comment "automatiser" cette commande via du perl (ou autre)
    Il existe surement une extension à Perl pour Win32 qui gère les processus ou les services ?

    Merci encore

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    L'interface Web que tu veux utilisé tournerait sur quel serveur Web ? Celui que tu cherches à redémarrer ?

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    528
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 528
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    L'interface Web que tu veux utilisé tournerait sur quel serveur Web ? Celui que tu cherches à redémarrer ?
    Oui, l'interface est desservie par le le serveur web que je souhaiterai redemarrer.
    Je dis bien redemarrer, et non pas un stop/start (sauf si les deux etapes peuvent se suivre ...)

  6. #6
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Va pas être facile si c'est le même... Tu as essayé de faire un script PHP qui fait la chose suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    exec("httpd -k restart");
    ?
    Ce n'est pas possible d'envisager une icône à double-cliquer sur le bureau, ou autre ?

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    528
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 528
    Par défaut
    J'ai essayé, mais ça ne fonctionne pas, alors j'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?
    if (exec("C:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd -k restart"))
    echo'<center>commande OK</center>';
    ?>
    Mais "Program n'est pas reconnu comme commande interne ....

  8. #8
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Essaie ceci :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?
    if (exec('"C:\Program Files\Apache Software Foundation\Apache2.2\bin\httpd -k restart"'))
    echo '<center>commande OK</center>';
    ?>
    avec des ' avec les " pour que les " fassent partie de la commande à exécuter. Si ça ne marche toujours pas, essaie avec les noms courts 8+3 : "Program Files" devient "progra~1" et "Apache Software Foundation" certainement "apache~1".

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    528
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 528
    Par défaut
    Rien de rien !
    J'ai même tenté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?
    $p="C:\WINDOWS\system32\cmd.exe";
    $rep=" C:\\Program Files\\Apache Software Foundation\\Apache2.2\\bin\\";
    if (exec($p.$rep."httpd -k restart"))
    echo'<center>Apache ok</center>';
    ?>
    Le script répond "ok", mais rien ne se passe !
    je continue de chercher ...

  10. #10
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Et l'icône sur le bureau comme alternative ?

    EDIT : alors, je viens de faire des tests et avec la commande httpd -k ... ça a l'air de ne pas fonctionner. En revanche, avec les commandes Windows net stop et net start, ça passe. Mon code PHP :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    exec("restart.cmd");
    ?>
    et restart.cmd :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    net stop Apache2.2
    net start Apache2.2
    Y a juste un effet de bord avec Firefox au moins : le script est exécuté deux fois car Firefox, lorsqu'il lance le script, Apache "tombe" donc il perd la connexion et attend quelques temps avant de relancer le script. Et c'est à la relance que le script s'exécute une seconde fois. Comme au bout d'un moment Firefox n'a toujours pas obtenu de réponse, il abandonne (il affiche un message d'erreur) et là, pas de 3ème restart. Le script demande peut-être à être optimisé avec du JavaScript ou je ne sais quoi pour éviter le redémarrage et pour afficher un message de succès quand c'est fini, mais au moins comme ça, ça marchote comme donc tu as un début de piste intéressante.

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    528
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 528
    Par défaut
    Bonjour,

    J'ai fait comme tu le preconises, mais j'ai un rejet sur le fichier ".cmd"
    J'ai bien mis un restart.cmd dans C:\ qui contient les deux comandes stop et start et un script php comme tu l'a codé.
    J'ai même essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?
    exec("C:\\restart.cmd");
    ?>
    Et j'ai dans la log
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'restart.cmd' n'est pas reconnu en tant que commande interne
    ou externe, un programme ex‚cutable ou un fichier de commandes.
    Une idée ?

  12. #12
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Etrange. Mon restart.cmd est à côté du fichier PHP, je n'ai pas essayé de le mettre dans un autre répertoire. C'est pour ça que c'est juste "restart.cmd" et pas "C:\\restart.cmd" ou autre.

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    528
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 528
    Par défaut
    Bonjour,

    J'ai tenté autre chose :
    une olution qui ne fonctionne pas non plus et dont je ne m'explique pas le resultat
    Le source du prog en C :
    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
    #include "stdafx.h"
    #include <stdio.h>
    #include <Windows.h>
     
     
    int main(int argc, char* argv[])
    {
    char lp[100];
    static int sz;
    char lpszShortPath[100];
     
        strcpy(lp, "C:\\Program Files\\Apache Software Foundation\\Apache2.2\\bin\\");
     
        sz=GetShortPathName((LPSTR)lp, (LPSTR)lpszShortPath, sizeof(lpszShortPath));
    //
        strcat((LPSTR)lpszShortPath, "httpd -k restart");
    //
        printf ("%d\n%s\n", sz,lpszShortPath);
    //
        system( (LPSTR)lpszShortPath );
    	return 0;
    }
    et dans la log d'erreurs Apapche
    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
    Usage: C:\\PROGRA~1\\APACHE~1\\Apache2.2\\bin\\httpd [-D name] [-d directory] [-f file]
                                                    [-C "directive"] [-c "directive"]
                                                    [-w] [-k start|restart|stop|shutdown]
                                                    [-k install|config|uninstall] [-n service_name]
                                                    [-v] [-V] [-h] [-l] [-L] [-t] [-S]
    Options:
      -D name            : define a name for use in <IfDefine name> directives
      -d directory       : specify an alternate initial ServerRoot
      -f file            : specify an alternate ServerConfigFile
      -C "directive"     : process directive before reading config files
      -c "directive"     : process directive after reading config files
      -n name            : set service name and use its ServerConfigFile
      -k start           : tell Apache to start
      -k restart         : tell running Apache to do a graceful restart
      -k stop|shutdown   : tell running Apache to shutdown
      -k install         : install an Apache service
      -k config          : change startup Options of an Apache service
      -k uninstall       : uninstall an Apache service
      -w                 : hold open the console window on error
      -e level           : show startup errors of level (see LogLevel)
      -E file            : log startup errors to file
      -v                 : show version number
      -V                 : show compile settings
      -h                 : list available command line options (this page)
      -l                 : list compiled in modules
      -L                 : list available configuration directives
      -t -D DUMP_VHOSTS  : show parsed settings (currently only vhost settings)
      -S                 : a synonym for -t -D DUMP_VHOSTS
      -t -D DUMP_MODULES : show all loaded modules 
      -M                 : a synonym for -t -D DUMP_MODULES
      -t                 : run syntax check for config files
    httpd: illegal option -- k

  14. #14
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Mais tu as essayé en faisant comme moi, en mettant restart.cmd et restart.php dans le même répertoire du document root ?

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    528
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 528
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    Mais tu as essayé en faisant comme moi, en mettant restart.cmd et restart.php dans le même répertoire du document root ?
    Oui, et quelque soit l'endroit ou je place les fichiers j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    '/restart.cmd' n'est pas reconnu en tant que commande interne
    ou externe, un programme ex‚cutable ou un fichier de commandes.

  16. #16
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Ne mets pas ./ : j'ai fait exactement ce que j'ai donné, comme code :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    exec("restart.cmd");
    avec restart.cmd à côté du fichier restart.php.

  17. #17
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    528
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 528
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    Ne mets pas ./ : j'ai fait exactement ce que j'ai donné, comme code :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    exec("restart.cmd");
    avec restart.cmd à côté du fichier restart.php.
    Bonjour,

    Je n'ai pas mis "/"
    J'ai fait exactement comme tu l'as ecrit
    Ce que j'ai mis en citation c'est le message dans la log d'Apache ...
    Finalement, j'ai opté pour une autre solution (pour le moment) :
    Chaque fois que je mets en place, que je modifie ou crée un Vhost, ma procedure php crée un fichier vide "RELOAD.txt"
    Ensuite j'ai placé une tache planifiée sui appelle toutes les minutes un fichier de commande "reload.cmd" qui lui, appelle mon exe en C
    reload.cmd :
    restart.c :
    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
    #include "stdafx.h"
    #include <stdio.h>
    #include <process.h>
    #include <Windows.h>
     
     
    int main(int argc, char* argv[])
    {
    char lp[100];
    int sz;
    char lpszShortPath[100];
    HANDLE hFile; 
    //
    hFile = CreateFile("RELOAD.TXT",           
                    GENERIC_READ,              
                    FILE_SHARE_READ,           
                    NULL,                      
                    OPEN_EXISTING,             
                    FILE_ATTRIBUTE_NORMAL,     
                    NULL);                     
     
    if (hFile == INVALID_HANDLE_VALUE) 
    { 
    	    printf ("le serveur n'a pas redemarré");
            return 0; 
    } 
     
     
        strcpy(lp, "C:\\Program Files\\Apache Software Foundation\\Apache2.2\\bin\\");
     
        sz=GetShortPathName((LPSTR)lp, (LPSTR)lpszShortPath, sizeof(lpszShortPath));
    //
        strcat((LPSTR)lpszShortPath, "httpd -k restart");
    //
        printf ("%s\n", lpszShortPath);
    //
        system( (LPSTR)lpszShortPath );
    //
        CloseHandle(hFile); 
        DeleteFile("RELOAD.TXT"); 
    //
        return 1;
    }
    Un peu lourd, mais ça marche ...

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/04/2010, 13h50
  2. Serveur Apache par dessus ?
    Par Mihaela dans le forum Oracle
    Réponses: 5
    Dernier message: 29/05/2006, 15h53
  3. [MySQL] Problème de backup par script PHP
    Par bagu dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 30/04/2006, 16h51
  4. Probleme apache et script perl-CGI
    Par Kara dans le forum Web
    Réponses: 8
    Dernier message: 20/04/2006, 21h05
  5. [MAPI] Envoi de courriels par scripts
    Par NicoNours dans le forum Windows
    Réponses: 3
    Dernier message: 26/05/2005, 12h01

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