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

Shell et commandes GNU Discussion :

CGI bash/ apache / Gnuplot


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Profil pro
    Futur administrateur systèmes
    Inscrit en
    Décembre 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Futur administrateur systèmes

    Informations forums :
    Inscription : Décembre 2010
    Messages : 57
    Points : 49
    Points
    49
    Par défaut CGI bash/ apache / Gnuplot
    Bonjour,

    Tout d'abord, le problème que je vais vous exposer étant lié à Apache et travaillant sous RedHat, je ne sais pas si je suis dans la bonne section ! Du coup, à lecture de mon post, si un modo/admin décide de déplacer mon post au bon endroit, il n'y a pas de problème !


    Le problème :


    J'essaie de mettre en place une CGI qui va me permettre, grâce à Gnuplot de générer des graphiques sur la consommation RAM/CPU de clusters. Comme je n'ai jamais fait ça, je test en local sur ma machine :

    - J'ai installé Apache
    - Dans mon dossier cgi-bin j'ai : mes deux " pages web " pour ma CGI, j'ai un .txt contenant des informations sur un cluster ( qui permet de générer le graph ) et un autre .txt contenant les commandes gnuplot que je souhaite exécuter.


    Voici à quoi ressemble le code de ma page principale de ma CGI pour le moment :
    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
    #!/bin/bash
     
    echo "Content-type: text/html"
    echo ""
     
    echo '
    <html>
    <head>
    <meta http-equiv="Content-Type" content="test/html"; charset=UTF-8">
    <title> CLUSTER GRAPH </title>
    <h1> Cluster Graph </h1>
    <hr size="4" color="blue">
    </head>
     
    <body>
     
    <p> Press the button to generate the graph ! </p>
    <form action="GNUGRAPH.sh" target="_blank">
    <button name="buton">Generate</button>
    </form>
     
    </body>
    </head>
    </html> '


    Donc sur cette page se trouve un bouton " Générer " qui, une fois que l'on clique dessus, va ouvrir dans un nouvel onglet ma deuxième page dont voici le code :
    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
    #!/bin/bash
     
    echo "Content-type: text/html"
    echo ""
     
    echo "
    <html>
    <head>
            <title> Cluster Graph </title>
            <h1> Cluster Graph </h1>
    <hr size="4" color="blue" >
     
    </head>
    <body>
     
    <PRE>"
    gnuplot gnuplot_test.txt
     
    echo "
    </PRE>
     
    </body>
    </html>
    "

    Cette page doit exécuter la commande " gnuplot gnuplot_test.txt " afin de générer mon graphique. Voici le contenu de mon " gnuplot_test.txt " :
    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
    f(w) = (strlen(w) > 10 ? word(w, 1) . "\n" . word(w, 2) : w)
     
    set title "CLUSTER 1"
    set terminal png truecolor size 960, 720
    set output 'cluster2.png'
    set bmargin at screen 0.1
    set key top center
    set grid
    set style data histograms
    set style fill solid 1.00 border -1
    set boxwidth 0.7 relative
    set yrange [0:]
    set format y "%g%%"
    set datafile separator ","
    plot "/var/www/cgi-bin/CLUSTER_1.txt" using 2:xtic(f(stringcolumn(1))) title " CPU consumption (%) ", \
    '' using 3 title " RAM consumption (%)", \
    '' using 0:($2+1):(sprintf("%g%%",$2)) with labels notitle, \
    '' using 0:($3+1):(sprintf("     %g%%",$3)) with labels notitle

    Le graphique qui doit être généré doit ressembler à cela ( le but final c'est qu'il s'affiche sur ma page directement, mais pour le moment je veux juste le générer ) :

    Nom : cluster1.png
Affichages : 193
Taille : 32,1 Ko


    Sauf que... ça ne fonctionne pas ! La commande " gnuplot gnuplot_test.txt " s'execute parfaitement manuellement si je suis dans le dossier /cgi-bin/, mais elle ne fonctionne pas via mon interface et je ne comprends pas pourquoi !

    Du coup j'ai été jeter un petit coup d'oeil dans mon /etc/httpd/logs/error_log et voici le contenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    [Wed Apr 10 10:21:00.467978 2019] [cgi:error] [pid 11948] [client ::1:46340] AH01215: , referer: http://localhost/cgi-bin/Index.sh
    [Wed Apr 10 10:21:00.468099 2019] [cgi:error] [pid 11948] [client ::1:46340] AH01215: "gnuplot_test.txt", line 5: , referer: http://localhost/cgi-bin/Index.sh
    [Wed Apr 10 10:21:00.468289 2019] [cgi:error] [pid 11948] [client ::1:46340] AH01215: util.c: Permission denied, referer: http://localhost/cgi-bin/Index.sh
    [Wed Apr 10 10:21:00.468333 2019] [cgi:error] [pid 11948] [client ::1:46340] AH01215: , referer: http://localhost/cgi-bin/Index.sh
    [Wed Apr 10 10:50:14.995409 2019] [cgi:error] [pid 11969] [client ::1:48676] AH01215: , referer: http://localhost/cgi-bin/Index.sh
    [Wed Apr 10 10:50:14.995503 2019] [cgi:error] [pid 11969] [client ::1:48676] AH01215: set output 'cluster2.png', referer: http://localhost/cgi-bin/Index.sh
    [Wed Apr 10 10:50:14.995562 2019] [cgi:error] [pid 11969] [client ::1:48676] AH01215:                          ^, referer: http://localhost/cgi-bin/Index.sh
    [Wed Apr 10 10:50:14.995653 2019] [cgi:error] [pid 11969] [client ::1:48676] AH01215: cannot open file; output not changed, referer: http://localhost/cgi-bin/Index.sh
    [Wed Apr 10 10:50:14.995772 2019] [cgi:error] [pid 11969] [client ::1:48676] AH01215: "gnuplot_test.txt", line 5: util.c: Permission denied, referer: http://localhost/cgi-bin/Index.sh
    [Wed Apr 10 10:50:14.995785 2019] [cgi:error] [pid 11969] [client ::1:48676] AH01215: , referer: http://localhost/cgi-bin/Index.sh

    Je ne comprends pas ces erreurs... Pourriez-vous m'expliquer ?


    Aussi, au cas où, j'ai même testé un chmod 777 sur mes fichiers pour voir si c'était un problème de droit, mais rien n'y fait :

    Nom : 1.png
Affichages : 203
Taille : 16,3 Ko



    Auriez-vous une idée ?


    Merci d'avance !

  2. #2
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    à vue de nez ça ressemble à un problème de droits, apache s'exécute en www-data ou similaire, du coup le script aussi, du coup le fichier est créé ou modifié avec les mêmes droits
    ça veut donc dire que le répertoire dans lequel atterrit le fichier créé doit autoriser www-data à écrire

    à tester

  3. #3
    Membre du Club
    Profil pro
    Futur administrateur systèmes
    Inscrit en
    Décembre 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Futur administrateur systèmes

    Informations forums :
    Inscription : Décembre 2010
    Messages : 57
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    salut,

    à vue de nez ça ressemble à un problème de droits, apache s'exécute en www-data ou similaire, du coup le script aussi, du coup le fichier est créé ou modifié avec les mêmes droits
    ça veut donc dire que le répertoire dans lequel atterrit le fichier créé doit autoriser www-data à écrire

    à tester
    Je vais tester ça !

    Petit truc en plus :

    Si dans mon gnuplot_test.txt, je change mon " gnupot gnuplot_test.txt " pour un " cat gnuplot_test.txt | gnuplot ", voilà ce qui apparait lorsque je clique sur mon boutton :

    Nom : 2.png
Affichages : 200
Taille : 190,4 Ko



    Je suppose donc qu'il y a bien quelque chose qui se passe, puisqu'il y a " PNG " au tout début, mais toujours pas de png généré. Voilà ce que dit mon " error_log " :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    [Wed Apr 10 13:56:26.727145 2019] [cgi:error] [pid 11969] [client ::1:54820] AH01215:                  , referer: http://localhost/cgi-bin/Index.sh
    [Wed Apr 10 13:56:26.727173 2019] [cgi:error] [pid 11969] [client ::1:54820] AH01215:       , referer: http://localhost/cgi-bin/Index.sh
    [Wed Apr 10 13:56:26.727190 2019] [cgi:error] [pid 11969] [client ::1:54820] AH01215:    , referer: http://localhost/cgi-bin/Index.sh
    [Wed Apr 10 13:56:26.727206 2019] [cgi:error] [pid 11969] [client ::1:54820] AH01215:     , referer: http://localhost/cgi-bin/Index.sh
    [Wed Apr 10 13:56:26.727216 2019] [cgi:error] [pid 11969] [client ::1:54820] AH01215: ^, referer: http://localhost/cgi-bin/Index.sh
    [Wed Apr 10 13:56:26.727238 2019] [cgi:error] [pid 11969] [client ::1:54820] AH01215:        , referer: http://localhost/cgi-bin/Index.sh
    [Wed Apr 10 13:56:26.727251 2019] [cgi:error] [pid 11969] [client ::1:54820] AH01215:   , referer: http://localhost/cgi-bin/Index.sh
    [Wed Apr 10 13:56:26.727337 2019] [cgi:error] [pid 11969] [client ::1:54820] AH01215: cannot open file; output not changed, referer: http://localhost/cgi-bin/Index.sh
    [Wed Apr 10 13:56:26.727431 2019] [cgi:error] [pid 11969] [client ::1:54820] AH01215:          line 0: util.c: Permission denied, referer: http://localhost/cgi-bin/Index.sh
    [Wed Apr 10 13:56:26.727440 2019] [cgi:error] [pid 11969] [client ::1:54820] AH01215: , referer: http://localhost/cgi-bin/Index.sh

  4. #4
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    en modifiant ton Content-type pour du image/png ça doit fonctionner

  5. #5
    Membre du Club
    Profil pro
    Futur administrateur systèmes
    Inscrit en
    Décembre 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Futur administrateur systèmes

    Informations forums :
    Inscription : Décembre 2010
    Messages : 57
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    en modifiant ton Content-type pour du image/png ça doit fonctionner
    Voilà ce que j'ai en terme de droit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    drwxrwxr-x. 2 root apache  4096 Apr 10 15:16 .
    drwxrwxrwx. 4 root apache  4096 Apr  3 15:49 ..
    -rwxrwxrwx. 1 root root     170 Apr 10 13:40 CLUSTER_1.txt
    -rwxrwxrwx. 1 root root   66553 Apr 10 11:21 ClusterFullList.txt
    -rwxrwxrwx. 1 root root     264 Apr 10 15:14 GNUGRAPH.sh
    -rwxrwxrwx. 1 root root     629 Apr 10 15:16 gnuplot_test.txt
    -rwxrwxrwx. 1 root root     444 Apr 10 15:14 Index.sh

    Déjà essayé de modifier mon Conten-Type, le résultat quand je clique sur bouton est une page noire avec écrit :

    The image "http://localhost/cgi-bin/GNUGRAPH.sh?buton=” cannot be displayed, because it contains errors

  6. #6
    Membre du Club
    Profil pro
    Futur administrateur systèmes
    Inscrit en
    Décembre 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Futur administrateur systèmes

    Informations forums :
    Inscription : Décembre 2010
    Messages : 57
    Points : 49
    Points
    49
    Par défaut
    Alors...

    Problème résolu en tapant la commande :


    Apparemment c'est SELinux qui me cassait les pieds sous RedHat... Je ne sais pas trop pourquoi.

    Cela dit, pas sûr que dans etc/selinux/config, passer SELinux en permissive au lieu d'enforcing soit une bonne chose.


    Pour mes tests je continuerai de faire un setenforce 0, mais je pense qu'en terme de sécurité, ce n'est peut être pas top.


    Si jamais vous avez une idée, je suis preneur !

  7. #7
    Membre du Club
    Profil pro
    Futur administrateur systèmes
    Inscrit en
    Décembre 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Futur administrateur systèmes

    Informations forums :
    Inscription : Décembre 2010
    Messages : 57
    Points : 49
    Points
    49
    Par défaut
    Je re-up mon post !

    Toujours une problème d'affichage... Mon image se génère correctement, mais impossible de l'afficher sur ma page web.

    Voici ma première page, avec un menu déroulant contenant la liste de mes clusters ainsi qu'un bouton " Générer " :

    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
    #!/bin/bash
     
     
    echo "Content-type: text/html"
    echo ""
     
    echo '
    <html>
    	<head>
    		<meta http-equiv="Content-Type" content="test/html"; charset=UTF-8">
    		<title> CLUSTER GRAPH </title>
    		<h1> Cluster Graph <font size=3> <a href="Index.sh">[ Index ]</a> </font> </h1>
    		<hr size="4" color="blue">
    	</head>
    <body>
     
    <p> Choose a Cluster and press the button to generate the graph ! </p>'
     
    Cluster_Name=$(cat ClusterFullList.csv | awk '{print $3}' | sort | uniq)
     
    echo "<form action="script_extract.sh" method="post">"
    echo "<select name="CLUSTER">"
    echo "$Cluster_Name" | while read CLUSTER; do
    	echo " <option value="$CLUSTER">$CLUSTER</option>"
    	done         
    echo "</select>"
            echo"<br><br>"
    	echo "<input type="submit" value="Generate">"
    echo "</form>"
     
    echo'
    </body>
    </html> 
    '
    Voici la seconde page qui devrait contenir mon graphique ainsi qu'un petit résumé de la consommation par mois :

    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
    #!/bin/bash
     
    echo "Content-type: text/html"
    echo ""
     
    echo "
    <html>
    	<head>
    		<title> CLUSTER GRAPH </title>
    		<h1> Cluster Graph <font size=3> <a href="Index.sh">[ Index ]</a></font></h1>
    		<hr size="4" color="blue">
     
     
    		<style>
    			 hr{
    			  margin-top: 1%;
    			 }
     
    			 #p1{
    			   font-size: 18px;
    			   text-decoration: underline;
    			   margin-top: -41.8%;
    			   margin-left: 58.5%;
    			   margin-bottom: 2%;
    			 }
     
    			 #p2{
    			   font-size: 14px;
                               margin-top: 39%;
    			   margin-left: 58.5%;
    			   margin-bottom: 4%;
    			 }
     
    		</style>
    	</head>
    <body>
    <img src="http://localhost/cgi-bin/"{$test}.png""
    <PRE>"
     
    read a
     
    test=`echo $a | cut -d'=' -f2`
     
    Cluster_data=`cat ClusterFullList.csv | grep -w $test | awk '{print $1" "$2","$12","$13}' > test1.txt`
     
    cat test.txt | sed "s/TITLE/$test/" | sed "s/CLUSTER_NAME.png/$test.png/" | sed "s/CLUSTER_1.txt/test1.txt/" > test2.txt 
     
    cat test2.txt | gnuplot
     
    echo "$(sed -n "s/CLUSTER_1.txt/test1.txt/" Script_Conso.sh)"
     
    echo "
    <PRE>
    <p id="p1">`echo "Consumption difference :"`</p> 
    <p id="p2">`./Script_Conso.sh`</p>
    </PRE>
    </body>
    </html>
    "

    Voici ce à quoi ressemble la seconde page :

    Nom : aaaaa.png
Affichages : 154
Taille : 46,7 Ko


    Comme vous pouvez le voir, mon image ne s'affiche pas, il n'y a qu'un petit carré blanc en haut à gauche. Le problème vient du fait que ma variable n'est pas prise en compte dans le tag <img> :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <body>
    <img src=http://localhost/cgi-bin/{}.png
    <PRE>

    J'essayer en mettant des accolades, des quotes, des doubles quotes, rien ne fonctionnent...

    Pourriez-vous m'indiquer comment faire en sorte que le nom de ma variable soit bien pris en compte ?


    Merci d'avance !

  8. #8
    Membre du Club
    Profil pro
    Futur administrateur systèmes
    Inscrit en
    Décembre 2010
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Futur administrateur systèmes

    Informations forums :
    Inscription : Décembre 2010
    Messages : 57
    Points : 49
    Points
    49
    Par défaut
    Bon bah en fait j'ai trouvé :

    J'ai mis mon <img src="......> après mon test et ça fonctionne bien mieux !Forcément, j'appellais l'image avant même qu'elle ne soit générée
    J'ai remplacé le src="/var/www/html/mon_image.png" par src="/mon_image.png"


    Voilà !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème accès ADO via appli CGI avec apache
    Par Le Lézard dans le forum Web & réseau
    Réponses: 0
    Dernier message: 12/11/2015, 12h44
  2. SOAP, CGI et Apache
    Par r0d dans le forum Services Web
    Réponses: 0
    Dernier message: 26/03/2010, 14h57
  3. [web] Apache Cgi-Bin
    Par Tommy Jean dans le forum Web
    Réponses: 8
    Dernier message: 23/08/2004, 18h46
  4. Réponses: 6
    Dernier message: 28/10/2002, 11h34

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