générer du html

Hello,

Je ne suis pas sûr que ma demande soit à placer ici ou en programmation, à dire vrai.

Bref, je dois mettre en place un monitoring qui doit vérifier du contenu. J’ai écrit un petit script que j’ai placé à la racine du webisite. Or, à l’arrivée je n’ai rien, hormis un done et une page blanche.

Your browser sent a request that this server could not understand.

si je vérifie en local, j’obtiens ceci :

get ping.html

400 Bad Request

Bad Request

Your browser sent a request that this server could not understand.

Connection closed by foreign host.

Le script lui-même :

echo "Content-type: text/html"
echo ""
echo "$(ping -q -W 1 -c 2 IP* > /dev/null 2>&1 & echo $(echo $?))"
echo “”

Ca marche impec en bash. Pas en html.

Du coup je ne sais pas si c’est mon script (je ne connais pas le html), ou si c’est un problème de configuration. Quelqu’un pourrait m’aider ?

*IP est bien sûr, l’ip que je veux pinguer. Elle est clairemnt indiqué dans mon script.

Pardon. Ca ne marche pas plus, mais j’ai modifié le script :

#!/usr/bin/bash

echo "Content-type: text/html"
echo ""
echo “$(if ping -q -W 1 -c 2 192.168.68.102 >/dev/null 2>&1 ; then echo - Resultat OK ; else echo -Resultat NOK ; fi & echo “” & echo - Code de sortie : echo $?)”

Ca parait mieux pour ce que je veux faire, à priori, même si pour l’instant je n’obtiens tjs rien.

[quote=“sonador”]Pardon. Ca ne marche pas plus, mais j’ai modifié le script :

echo "Content-type: text/html"
echo ""
echo "<html><head><title>$(ping -q -W 1 -c 2 IP* > /dev/null 2>&1 & echo $(echo $?))</title></head><body>"
echo "</body></html>"

Ca parait mieux pour ce que je veux faire, à priori, même si pour l’instant je n’obtiens tjs rien.[/quote]
C’est pas “vraiment” de l’HTML mais du CGI que tu fais là.

Ca marche si c’est bien configuré:

wget  -SO - http://me/~francois/test.cgi
--2010-01-08 14:28:19--  http://me/~francois/test.cgi
Resolving me... 127.0.0.1
Connecting to me|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 
  HTTP/1.0 200 OK
  Connection: keep-alive
  Content-type: text/html
  Content-Length: 57
  Date: Fri, 08 Jan 2010 13:28:19 GMT
  Server: lighttpd/1.4.19
Length: 57 [text/html]
Saving to: `STDOUT'

<html><head><title>0</title></head><body>
</body></html>

Mais faire du cgi avec bash présente des risques, même si là ça n’est que de la lecture seule du point de vue du visiteur.

A la limite si tu débutes dans la programmation web, je te recommande PHP, parce que configurer le CGI est délicat niveau sécurité.

Bref, t’as un problème de config, mais on sait même pas quel serveur tu utilises etc. Donnes nous plus d’infos :wink:

EDIT:

#!/usr/bin/bash

echo "Content-type: text/html"
echo ""
echo "<html><head><title>$(if ping -q -W 1 -c 2 192.168.68.102 >/dev/null 2>&1 ; then echo - Resultat OK ; else echo -Resultat NOK ; fi & echo "" & echo - Code de sortie : echo $?)</title></head></html>"

“Code de sortie” sera toujours égal à 0 à part si ‘if’ n’est pas présent (ce qui n’est pas prêt d’arriver à priori), et il manque des quotes :wink:

$? c’est le code de retour de la dernière instruction et ça n’est pas forcément la dernière commande lancée.

yep,

En fait, pour le $?, je me doutais du truc, c’est pour ça que j’ai mis un if/then portant la commande. En fait je vais l’enlever, ce sera aussi bien.

Pour le reste j’ai testé avec une machine qui ping google et une autre qui ne la pingue pas. Dans un cas, j’ai bien le ok dans l’autre non. Donc, configurtion et code bash/php à part, je suppose que sur le principe lui-même, ça fonctionne.

Comme ça, le code te parait mieux ?

#!/usr/bin/bash

echo "Content-type: text/html"
echo ""
echo “$(if ping -q -W 1 -c 2 192.168.68.102 >/dev/null 2>&1 ; then echo “- Resultat OK” ; else echo “- Resultat KO” ; fi)”

Ensuite, ici, il ne s’agit que de monitoring. Un poller vérifiera le contenu toutes les 5 minutes et nous dira s’il voit “ok” ou non (d’ailleurs j’ai mis “KO” à la place car on risque l’ambiguité, sinon, vu qu’il y a OK dans NOK). :slightly_smiling:. Hormis le poller, en principe, il n’y aura pas de visiteurs sur la page.

Côté détail, eh bien c’est du apache. Si je reprends ton exemple avec localhost :

Reusing existing connection to localhost:80.
HTTP request sent, awaiting response…
HTTP/1.1 200 OK
Date: Fri, 08 Jan 2010 14:22:02 GMT
Server: Apache/2.2.3 (Debian) mod_python/3.2.10 Python/2.4.4 PHP/5.2.0-8+etch15 mod_ssl/2.2.3 OpenSSL/0.9.8c mod_perl/2.0.2 Perl/v5.8.8
Last-Modified: Mon, 17 Nov 2008 13:40:10 GMT

si j’utilise mon fichier :

HTTP request sent, awaiting response…
HTTP/1.1 404 Not Found
Date: Fri, 08 Jan 2010 14:23:27 GMT

Et enfin, si je la porte sur l’ip :

HTTP request sent, awaiting response…
Length: unspecified

[<=>                                                                       ] 0             --.--K/s             <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
400 Bad Request

Bad Request

Your browser sent a request that this server could not understand.
Reason: You're speaking plain HTTP to an SSL-enabled server port.

Et là… je lis la dernière ligne… Interessant… Je vais regarder la config. En principe, il y aun site enabled sur le port 80 et un sur le port 443.

Tiens, la configuration du vhost (j’ai "masqué les infos sensibles lol) :

ServerAdmin webmaster@localhost ServerName xxxxxxxxxxxxxxxxx:443
    DocumentRoot /home/www/xxxxxxxxxxxxxxxxx
    <Directory /home/www/xxxxxxxxxxxxxxxxx/>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>

    ErrorLog /var/log/apache2/xxxxxxxxxxxxxxxxx.log
    TransferLog /var/log/apache2/xxxxxxxxxxxxxxxxx.log

    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/xxxxxxxxxxxxxxxxx.crt
    SSLCertificateKeyFile /etc/apache2/ssl/xxxxxxxxxxxxxxxxx.key
    SSLCertificateChainFile /etc/apache2/ssl/xxxxxxxxxxxxxxxxx.crt
    SSLCACertificateFile /etc/apache2/ssl/xxxxxxxxxxxxxxxxx.crt

    # Possible values include: debug, info, notice, warn, error, crit,
    # alert, emerg.
    LogLevel warn

    CustomLog /var/log/apache2/access.log combined
    ServerSignature On
ServerAdmin webmaster@localhost ServerName xxxxxxxxxxxxxxxxx:80
    DocumentRoot xxxxxxxxxxxxxxxxx        
    <Directory xxxxxxxxxxxxxxxxx
            Options Indexes FollowSymLinks MultiViews
            AllowOverride None
            Order allow,deny
            allow from all
    </Directory>

    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl/xxxxxxxxxxxxxxxxx.crt
    SSLCertificateKeyFile /etc/apache2/ssl/xxxxxxxxxxxxxxxxx.key
    SSLCertificateChainFile /etc/apache2/ssl/xxxxxxxxxxxxxxxxx.crt
    SSLCACertificateFile /etc/apache2/ssl/xxxxxxxxxxxxxxxxx.crt
    ServerSignature On

Je n’ai pas configuré le site, mais… du SSL en “on” sur un site configuré pour le port 80 ? C’est normal, ça ?

A priori non - mais t’es censé savoir de quoi tu as besoin. Prends pas ma réponse comme un “non” formel, j’ai pas touché du apache depuis que lighttpd sait faire du php+perl :wink:

En fait je n’ai pas configuré ce service. Et je n’ai jamais configuré moi-même apache. C’est donc une bonne occasion de se plonger un peu dedans :slightly_smiling:

C’est en cherchant que j’ai trouvé ce point. Mais je le reconnais : le pb ne se situe peut-être pas là ? (je trouve quand même que c’est suspect)