Bonjour,
diapublié sur fr.comp.infosystemes.www.serveurs car, à la base, c'est
pour traiter le non démarrage d'un service Apache sous Windows dont, en
final, le pourquoi est traité par une regex qui me paraît beaucoup trop
simple !
Je publie l'historique du problème, pensant que ça pourrait servir à
d'autres.
En local sous Windows et Wampserver, pas de démarrage du service
wampapache64.
- Vérification syntaxe par "httpd.exe -t" aucune erreur
- Tentative de démarrage par "httpd.exe -n wampapache64 -k start"
aucun message et aucune erreur
Le log apache voit le service démarré
Starting the 'wampapache64' service
The 'wampapache64' service is running.
Pas d'informations supplémentaires, même en passant LogLevel sur debug.
- Tentative de démarrage par "net start wampapache64"
Le service wampapache64 démarre.
Le service wampapache64 n’a pas pu être lancé.
Une erreur spécifique à un service s’est produite : 1.
Le helpmsg ne donne aucune précision supplémentaire
- Tentative de démarrage via le gestionnaire des services
Le service n'a pas pu démarrer. Consulter le journal d'événements pour
plus de détails.
Effectivement, dans le gestionnaire d'événements :
> The Apache service named reported the following error:
>>> AH00526: Syntax error on line 123 of E:/wamp64/bin/apache/apache2.4.41/conf/extra/httpd-vhosts.conf: .
et
> The Apache service named reported the following error:
>>> DocumentRoot must be a directory .
Bizarre, d'autant plus que le test de syntaxe ne voit pas d'erreur (voir
plus haut).
Quelle est cette ligne 123 de httpd-vhosts.conf ?
DocumentRoot "//DS218/home/sites/photos-ottello"
Tient donc, un VirtualHost sur un disque réseau NAS.
Je vous passe les péripéties des recherches du pourquoi et du comment y
remédier, mais, même si les explications sont quelque peu sibyllines, la
documentation Apache m'a bien aiguillée :
Apache - Configuration de l'accès aux ressources réseau
http://httpd.apache.org/docs/2.4/fr/platform/windows.html#windrivemap
/Lorsqu'Apache s'exécute en tant que service, vous devez créer un compte
spécifique afin de pouvoir accéder aux ressources réseau/
Et c'était bien ça. Dans les propriétés du service, Connexion, il faut
remplacer le Compte Système local par Ce compte avec un compte
utilisateur/administrateur et mot de passe.
Vu qu'avec Wampserver j'utilise php CLI pour récupérer les informations
système, je vous passe les péripéties pour trouver comment accéder à
l'observateur d'événements en ligne de commande pour retrouver les deux
dernières erreurs éventuelles sur Apache Service ; en php, ça donne :
> $command = "wevtutil qe Application /c:2 /rd:true /f:text /q:\"*[System[Provider[@Name='Apache Service'] and (Level=2)]]\"";
> $output = `$command`;
On en arrive doucement aux regex...
Le résultat total, si il y a des erreurs Apache Service est :
---------------------------------------------
Event[0]:
Log Name: Application
Source: Apache Service
Date: 2020-01-04T13:02:49.288
Event ID: 3299
Task: N/A
Level: Erreur
Opcode: Informations
Keyword: Classique
User: N/A
User Name: N/A
Computer: DOMI
Description:
The Apache service named reported the following error:
>>> DocumentRoot must be a directory .
Event[1]:
Log Name: Application
Source: Apache Service
Date: 2020-01-04T13:02:49.288
Event ID: 3299
Task: N/A
Level: Erreur
Opcode: Informations
Keyword: Classique
User: N/A
User Name: N/A
Computer: DOMI
Description:
The Apache service named reported the following error:
>>> AH00526: Syntax error on line 123 of E:/wamp64/bin/apache/apache2.4.41/conf/extra/httpd-vhosts.conf: .
---------------------------------------------
Ce que je cherche est de ne récupérer que la dernière ligne de chaque
bloc, celle qui commence par >>> et le preg_match_all est, après
quelques essais, modifications et simplifications :
preg_match_all("~(>>>.*)$~m",$output,$matches);
N'y aurait-il pas des risques ?
Pour être certain que c'était bien les lignes après Description: j'avais
avant simplification :
preg_match_all("~Description:.*\r?\n.*\r?\n(>>>.*)\r?$~im",$output,$matches);
Merci d'avoir lu jusqu'au bout.
--
Aujourd'hui, l'idéal du progrès est remplacé par l'idéal de l'innovation :
il ne s'agit pas que ce soit mieux, il s'agit seulement que ce soit
nouveau, même si c'est pire qu'avant et cela de toute évidence.
Henry de Montherlant - Va jouer avec cette poussière