08 août 2014

Controle du daemon Apache 2

Les packages précompilés pour Windows tels que WAMP ou XAMPP sont livrés avec une petite interface graphique pour gérer les divers services (daemon). Quand on se compile tout soit même on n’a pas cet outil. Que cela ne tienne !

Voici un batch pour gérer les arrêts/démarrages du daemon httpd d’Apache 2. Il est très pratique quand on met au point une configuration et qu’il faut souvent la recharger.

Il faut obligatoirement exécuter ce batch en faisant  un clic bouton droit dessus et en choisissant « exécuter en tant qu’administrateur ». Il y a dans le script une tentative d’utiliser « runas » pour le lancer en admin directement en tapant  son nom sur la ligne de commande mais il semble que les droits obtenus avec cette méthode ne soient pas suffisants pour installer le service.

Il faut adapter deux variables au début du fichier:
- le path complet de httpd.exe
- le nom de votre compte ayant les droits d’administrateur,

Il est facile d'étendre ce batch en fonction des besoins. On peut ajouter l’ouverture des fichiers de conf dans un éditeur comme notepad++ et l’affichage des logs (facile à faire si on installe la commande tail de gnuwin32)


@echo off
set HTTPD=C:\Path\to\Apache2\bin\httpd.exe
set ADMUSR=admin

if [%USERNAME%] == [%ADMUSR%] goto :init
@echo.
@echo Droits administrateur requis
runas /profile /user:%ADMUSR% %~dpnx0
if ERRORLEVEL 1 pause
goto :eof

:init
rem Fixe la taille visible de la fenêtre
mode con:cols=80 lines=40
rem Fixe la taille du buffer
powershell -command "&{$H=get-host;$W=$H.ui.rawui;$B=$W.buffersize;$B.width=80;$B.height=300;$W.buffersize=$B;}"
call :do_help

:loop
@echo.
set /P OP="Operation (help): "
2>nul call :do_%OP%
if ERRORLEVEL 1 call :erreur
goto :loop

:do_h
:do_help
@echo.
@echo == Operations :
@echo   h = help
@echo   i = info
@echo   install, uninstall
@echo   start, r = restart, stop
@echo   on=(install + start) off=(stop + uninstall)  info
@echo   q = quit
@goto :done

:do_on
@echo on
%HTTPD% -k install
%HTTPD% -k start
@goto :done

:do_off
@echo on
%HTTPD% -k stop
%HTTPD% -k uninstall
@goto :done

:do_i
:do_info
%HTTPD% -v -V
%HTTPD% -l
%HTTPD% -M
@goto :done

:do_r
set OP=restart

:do_install
:do_start
:do_restart
:do_stop
:do_uninstall
@echo on
%HTTPD% -k %OP%


:done
@echo off

rem force le errorlevel à zéro
ver > nul
goto :eof

:erreur
@echo.
@echo ERREUR: "%OP%" n'est une opération valide.
goto :eof


:do_q
:do_quit
:do_exit
exit


Bon, effectivement, il existe le très spartiate Apache Service Monitor  mais qui n’est pas extensible comme notre batch. Son avantage est de pouvoir gérer des serveurs Apache s’exécutant sur des machines Windows distantes.