Problème appel script bash depuis php

Discussion dans 'Administration d'un site Web' créé par Gons, 9 Juin 2011.

  1. Gons
    Gons Nouveau WRInaute
    Inscrit:
    21 Mai 2011
    Messages:
    17
    J'aime reçus:
    0
    Bonjour à tous !

    J'ai un problème et malgré plusieurs heures à tourner dessus, à lire et lire sur le net, je ne comprends pas...

    J'ai réalisé un script bash qui fonctionne très bien quand je le lance via ssh sur mon serveur. Je lui ai donné les droit chmod 777.
    Pourtant ma page php avec exec('sh /home/le/chemin/vers/mon/script/script.sh'); ne fonctionne pas...

    Si je remplace par exec('une commande a executer'), la commande est bien exécutée ?

    D'où peut venir le problème ?

    Merci pour votre aide !
     
  2. DeLoVaN
    DeLoVaN Nouveau WRInaute
    Inscrit:
    8 Juin 2011
    Messages:
    37
    J'aime reçus:
    0
    Ca ne fonctionne pas... Tu as un message d'erreur quelconque à nous transmettre ?
    Ton script marche en console ?
    Et si tu remplace sh par /bin/sh (voire /bin/bash) ?
     
  3. Gons
    Gons Nouveau WRInaute
    Inscrit:
    21 Mai 2011
    Messages:
    17
    J'aime reçus:
    0
    Aucun message d'erreur. Le script ne s'exécute pas. Comment pourrais-je en connaître la cause ?
    Sinon avec /bin/sh et /bin/bash ça change rien. Il fonctionne en console.
     
  4. e-kiwi
    e-kiwi WRInaute accro
    Inscrit:
    23 Décembre 2003
    Messages:
    13 257
    J'aime reçus:
    1
    >> Comment pourrais-je en connaître la cause ?
    dans les logs apache ?
     
  5. Gons
    Gons Nouveau WRInaute
    Inscrit:
    21 Mai 2011
    Messages:
    17
    J'aime reçus:
    0
    voilà :

    Code:
    sh: Can't open /home/blabla/blabla.sh
    /bin/sh: Can't open /home/blabla/blabla.sh
    /bin/bash: /home/blabla/blabla.sh: Permission denied
    
     
  6. passion
    passion WRInaute accro
    Inscrit:
    6 Janvier 2006
    Messages:
    3 816
    J'aime reçus:
    154
    il semblerait que le user qui va lancer le script bash n'est pas les droits suffisants !
     
  7. Gons
    Gons Nouveau WRInaute
    Inscrit:
    21 Mai 2011
    Messages:
    17
    J'aime reçus:
    0
    Après avoir changer mon script de groupe (www-data) et l'avoir mis dans /var/www/chemin/vers/mes/scripts/web
    Il accède bien au script.

    Cependant, certaines actions à l'intérieur de mon script ne peuvent être exécutées par manque de droits.
    J'ai pourtant fait certaines démarches indiquées ici :

    Code:
    www-data ALL=(ALL) NOPASSWD: /var/www/chemin/vers/mes/scripts/web/script.sh
    Dans /etc/sudoers avec visudo

    et
    Code:
    /etc/init.d/sudo restart 
    pour être sûr (j'ai même redémarré apache2)

    Je n'ai toutefois toujours pas les permissions pour effectuer certaines commandes de mon script :(

    Voilà les erreurs (pour les fichiers qui n'existent pas, c'est normal puisque mon script devait les créer)

    Code:
    tar: applicationparameters.txt: Cannot open: Permission denied
    tar: seasoninfo.txt: Cannot open: Permission denied
    tar: levelinfo.txt: Cannot open: Permission denied
    tar: playercategories.txt: Cannot open: Permission denied
    tar: clubs.txt: Cannot open: Permission denied
    tar: venues.txt: Cannot open: Permission denied
    tar: players.txt: Cannot open: Permission denied
    tar: fixtures.txt: Cannot open: Permission denied
    tar: tournaments.txt: Cannot open: Permission denied
    tar: matchtypes.txt: Cannot open: Permission denied
    tar: calenderdates.txt: Cannot open: Permission denied
    tar: Exiting with failure status due to previous errors
    mv: cannot stat `players.txt': No such file or directory
    rm: cannot remove `*.txt': No such file or directory
    rm: cannot remove `db-20110607.tabt': Permission denied
    /var/www/infoping/scripts/maj_affilies_fr.sh: 18: cannot open /var/www/infoping/scripts/affilies/players.txt: No such file
    rm: cannot remove `*.txt': No such file or directory
    /var/www/infoping/scripts/maj_affilies_fr.sh: 21: cannot create joueurs.csv: Permission denied
    cat: joueurs2.csv: No such file or directory
    rm: cannot remove `joueurs2.csv': No such file or directory
    sed: can't read joueurs.csv: No such file or directory
    ERROR 2 (HY000) at line 1: File '/var/www/infoping/scripts/affilies/joueurs.csv' not found (Errcode: 2)
    rm: cannot remove `/var/www/infoping/scripts/affilies/*': No such file or directory
     
  8. _Soul
    _Soul WRInaute impliqué
    Inscrit:
    26 Avril 2011
    Messages:
    626
    J'aime reçus:
    0
    Si ta un ../xxx dans ton script sa ne fonctionnera pas, il faut des chemins "direct".

    Sinon tu dois pas éditer tes fichiers en root, fais un sudo avant, essaye en fessant exec('sudo /home/le/chemin/vers/mon/script/script.sh');

    Bonne chance ;)
     
  9. Gons
    Gons Nouveau WRInaute
    Inscrit:
    21 Mai 2011
    Messages:
    17
    J'aime reçus:
    0
    Les chemins sont directs. Avec sudo :

    Code:
    sudo: no tty present and no askpass program specified
    
     
  10. _Soul
    _Soul WRInaute impliqué
    Inscrit:
    26 Avril 2011
    Messages:
    626
    J'aime reçus:
    0
    Si dans le script tu fais juste un 'touch plop' sa fonctionne?
     
  11. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 593
    J'aime reçus:
    0
    Euuuuh... Tu es certain que tu n'as pas un autre moyen d'arriver à faire ce que tu veux? Lancer un script bash avec des droits root depuis un script php, ça me paraît horriblement dangereux. Tu as intérêt à très sérieusement bien vérifier tout ce que tu passe à ton script, et plutôt deux fois qu'une!

    Jacques.
     
  12. Gons
    Gons Nouveau WRInaute
    Inscrit:
    21 Mai 2011
    Messages:
    17
    J'aime reçus:
    0
    Voilà la réponse :( :
    Code:
    touch: cannot touch `plop': Permission denied
    Cette page php est une page d'administration accessible uniquement par moi via mot de passe. De plus mon script bash ne prend aucun paramètre. Il télécharge un fichier sur un site distant et met à jour ma BDD.
     
  13. DeLoVaN
    DeLoVaN Nouveau WRInaute
    Inscrit:
    8 Juin 2011
    Messages:
    37
    J'aime reçus:
    0
    Balance un petit chmod 777 pour vérifier. Tu es sur de passer avec le www-data ? Tu n'utilise pas suexec ou suphp par ex ?
     
  14. Julia41
    Julia41 WRInaute passionné
    Inscrit:
    31 Août 2007
    Messages:
    1 779
    J'aime reçus:
    0
    T'as tenté avec le chemin absolu ?
    /home/tonsite/www/plop ?
    Car là "plop" ça sera ptete dans /usr/sbin/

    Je suis un peu d'accord avec jcaron.
    A mon niveau j'avais fraudé avec un :
    "on écrit exactement ce qu'on veut dans un fichier .txt, un cron execute ce script (si présent)".
     
  15. jcaron
    jcaron WRInaute accro
    Inscrit:
    13 Février 2004
    Messages:
    2 593
    J'aime reçus:
    0
    Ce qui m'amène les questions suivantes:
    - pourquoi ne pas faire tout ça directement en php?
    - quel besoin d'exécuter ça avec des droits root?

    Jacques.
     
  16. Gons
    Gons Nouveau WRInaute
    Inscrit:
    21 Mai 2011
    Messages:
    17
    J'aime reçus:
    0
    - car cela serait plus lent (du moins je pense), je dois faire un "tar xvf" sur le fichier puis récupérer un autre qui possède 18000 lignes et je fais des traitements dessus avec les commandes awk cat et sed avant d'envoyer tout ça ds ma BDD
    - car /var/log/apache2/error.log il me dit que j'ai pas la permission pour effectuer ces commandes (ça fonctionne très bien si je lance mon script en ssh).

    Désolé, je ne connais pas la commande "touch", je dois faire touch /le/chemin/vers/mon/site ?

    En tout cas, merci de vous attarder ici et tenter de m'aider !
     
  17. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 130
    J'aime reçus:
    12
    Bonsoir

    En ce qui me concerne, j'ai été amené, à fournir à mon site partenaire de mon site de Turf, un ensemble de scripts php et en Bourne Shell, pour mettre à jour quotidiennement mes pronostics sur mon site, et rapatrier la page de ces pronostics vers mon site partenaire.

    J'avais effectivement, à lancer un script en Bourne Shell, à partir d'un script php.

    Voici la syntaxe, en utilisant la fonction php shell_exec() , recommandée par le site du PHP Manual, à la place de exec() :

    Code:
    
    <?php
      $output = @shell_exec("./script.sh");
    ?>
    
    

    Ensuite, la variable $output, contient tout ce qui a été affiché ( par echo, ou bien les messages d'erreurs du script script.sh ).

    Le fait que le script script.sh , se trouve dans le mếme répertoire que le script php, permet de spécifier le chemin du script script.sh simplement, en le préfixant par un point et un slash. "./script.sh" donc ).

    Normalement, j'ai déjà testé avec des paramètres, et aussi avec une redirection des erreurs vers le puids sans fond 2>/dev/null, ça marche très bien, et le script en Bourne Shell prend très bien les paramètres dans les variables $1, $2, etc... comme tout bon script en Bourne Shell qui se respecte.

    Il est vrai, que le serveur où ceci a été mis au poinnt, avait le "Safe Mode" désactivé, c'est-à-dire à off.

    Evidemment, c'st sûr que le script en Bourne Shell, doit avoir pour première ligne, ceci :

    #/bin/sh

    De toute manière, l'interpréteur sh ( équivalent de bash ), est toujours dans le répertoire /bin/ ( et non pas /usr/bin/ ), dans un système Unix ou Linux.

    Mais bon...

    Bien à vous.

    Amicalement.

    Jean-François Ortolo
     
  18. ortolojf
    ortolojf WRInaute accro
    Inscrit:
    14 Août 2002
    Messages:
    3 130
    J'aime reçus:
    12
    Rebonsoir

    J'ajoute, que dans le script en Bourne Shell, j'ai pris la précaution de configurer la variable d'environnement $PATH, de cette manière :

    Code:
    
    #/bin/sh
    
    PATH=$PATH:/usr/bin/:/usr/local/bin/:.
    export $PATH
    
    # Il ne faut pas oublier les deux-points et le point à la fin,
    # pour le répertoire courant.
    
    $repert="votre répertoire absolu courant"
    cd $repert
    
    # Pour obtenir le chemin absolu d'une commande, c'est simple :
    awk=`which awk`
    
    # La variable $awk contient maintenant le chemin absolu de la commande awk
    # C'est merveilleux, c'est-ce pas ?  ;)
    #
    
    # Pour avoir le chemin absolu de l'interpréteur php, c'est plus compliqué, il peut y avoir la version cli, et la version cgi de php, qui correspodent à plusieurs programmes différents, même de noms différents.
    # En général, si le php du serveur est en mode cgi :
    php_cgi=`which php`
    # ... contiendra le chemin de l'interpréteur cgi.
    
    # Si le serveur est configuré par défaut en mode cli, c'est le contraire ( mode cli ).
    
    # Etc... On fait la tâche...
    
    exit 0
    
    

    Bien à vous.

    Amicalement.

    Jean-François Ortolo
     
Chargement...
Similar Threads - Problème appel script Forum Date
Problème extension d'appel - HELP AdWords 26 Novembre 2013
L'ajax, problème d'appel et de modification de variables Développement d'un site Web ou d'une appli mobile 24 Février 2012
Problème de trafic incorrect (plus de 3000€) / RPM à 35€ AdSense Vendredi à 17:27
Problèmes d'indexations de Google Crawl et indexation Google, sitemaps Lundi à 12:10
Problème d'indexation pour de nombreuses pages Débuter en référencement 10 Octobre 2020
Microdonnées : problème avec product Débuter en référencement 6 Octobre 2020
Probléme de texte gras, code HTML Demandes d'avis et de conseils sur vos sites 5 Octobre 2020
Search Console J'ai un problème : 5 pages indexés et 43 exclues Crawl et indexation Google, sitemaps 2 Octobre 2020
Search Console Problème d'indexations de pages produits Crawl et indexation Google, sitemaps 30 Septembre 2020
Search Console Probleme redirection nom de domaine et indexation google Crawl et indexation Google, sitemaps 16 Septembre 2020