Page 1 sur 2

Executer un script shell

Posté : 19 févr. 2016, 01:12
par Se7en512
Bonjour,

je souhaite exécuter le script shell "script.sh" présent dans le même répertoire que le fichier php l’exécutant.
J'ai testé avec la fonction exec et system, mais le script ne se lance pas.
if( exec('./script.sh') ) {   echo "OK";    }
else {  echo "marche pas" ;     }
L'utilisateur nginx est "http" et le groupe "http". En effet quand je crée un fichier via PHP, il se crée avec l'user "http" (et non pas www-data) j'ai vérifié également dans /etc/passwd.

J'ai donc fais ceci :

chmod 777 script.sh
chown http:http script.sh

Le script se lance bien manuellement, mais pas à l'appel de ma page php.

Merci d'avance pour votre aide ! :wink:

Re: Executer un script shell

Posté : 19 févr. 2016, 01:21
par Saian
Bonsoir, ça echo quoi ? OK ou marche pas ? question bête mais la fonction exec est-elle bien autorisée par la configuration du serveur ?
Sinon les droits ont l'air bons. Un peu brutale le 777, tu peux rester sur un chown ton_user:http avec chmod 775.

Re: Executer un script shell

Posté : 19 févr. 2016, 01:23
par Se7en512
Le echo répond "marche pas" ;).
Et oui je suis d'accord c'est brutal le 777, je modifierai quand mon problème sera réglé.

Je vais essayer de me renseigner sur la configuration nginx pour executer des fonctions. Si quelqu'un à la solution, je veux bien :).

J'ai également testé la fonction shell_exec, meme resultat !

Re: Executer un script shell

Posté : 19 févr. 2016, 01:31
par Se7en512
Pour info, mon fichier "/etc/php/php.ini" contient la variable disable_functions, mais celle ci est configuré à NULL (enfin aucune valeur).
Donc le php ne semble pas bloquer cette fonction.

Re: Executer un script shell

Posté : 19 févr. 2016, 01:32
par Saian
Et la commande fait quoi ? t'es sur qu'elle ne s'est pas exécutée ? c'est pas juste un problème de retour du exec ? (sensé retourner la dernière ligne du résultat de la commande, alors si la dernière ligne est 0 ^^)

EDIT je viens de tester chez moi et pas de problème avec exec.php :
<?php
echo exec('./hello.sh');
hello.sh (en 775 avec mon_user:mon_user) :

Code : Tout sélectionner

echo HELLO
La page php affiche HELLO

Re: Executer un script shell

Posté : 19 févr. 2016, 01:36
par Se7en512
Je suis certain à 100% que le script n'est pas exécuté.
En réalité je n'ai pas besoin de valeur de retour, je veux juste que le script s'execute et face son job, ce qu'il ne fait pas ^^

Re: Executer un script shell

Posté : 19 févr. 2016, 01:40
par Se7en512
Réponse suite à ton EDIT :

Tu es sous apache ou nginx ?

Re: Executer un script shell

Posté : 19 févr. 2016, 01:42
par Saian
Sous Apache.

Si tu exécutes le script php en ligne de commande ça fonctionne ou pas ?
Si ça fonctionne, le problème vient du serveur web.

EDIT tu as rien dans le log d'erreur nginx ? peut être une piste...
Peut être tu peux vérifier le safe_mode aussi (qu'il aurait fallu vérifier en premier ^^).
Note: Lorsque le safe mode est activé, vous pouvez uniquement exécuter des programmes qui se situent dans le dossier défini par safe_mode_exec_dir. Pour des raisons pratiques, il n'est actuellement pas permis d''avoir le composant .. dans le chemin de l'exécutable.

Re: Executer un script shell

Posté : 19 févr. 2016, 01:52
par Se7en512
Comment executer ma page php en ligne de commande ? ^^

Rien dans le fichier error.log de nginx

Apparement le safe_mode a été abandonné depuis PHP 5.4.0 (http://php.net/manual/fr/ini.sect.safe-mode.php), mais j'ai tout de même vérifié, je n'ai aucune ligne safe_mode sauf pour le sql à l'état OFF.

Pour info j'ai testé en executant ton script hello.sh, ça marche pas :/ (chown + chmod bien sur). Le script :

#!/bin/sh
echo "HELLO"
exit 0

EDIT : version PHP 5.5.31

Re: Executer un script shell

Posté : 19 févr. 2016, 01:56
par Saian
Pour exécuter le script php en ligne de commande, c'est simplement :
php script.php

Re: Executer un script shell

Posté : 19 févr. 2016, 01:59
par Se7en512
Au lieu d'executer le script php, il m'affiche le contenu de mon fichier fichier x).

Re: Executer un script shell

Posté : 19 févr. 2016, 02:00
par Saian
Genre il manque la balise <?php en haut du fichier ? ^^

Re: Executer un script shell

Posté : 19 févr. 2016, 02:04
par Se7en512
Ah non pardon il l'execute bien (la page PHP), autant pour moi :p

Bon bah on a une partie de l'explication, ça affiche :

[...]
sh: ./hello.sh: not found
<font color='white'> marche pas </font>
[...]


[EDIT] : si je fais un exec('ls') ça fonctionne, mais pas pour mon script. why ? (j'ai la tête en feu haha)
[EDIT²] : je confirme que le fichier php et le fichier .sh sont dans le meme repertoire ... je comprend pas pourquoi il répond qu'il ne le trouve pas O_O

Re: Executer un script shell

Posté : 19 févr. 2016, 02:09
par Saian
Oui car ton script c'est ./script.sh non ? La fatigue ;D

Re: Executer un script shell

Posté : 19 févr. 2016, 02:12
par Se7en512
Oui en effet j'ai du tapé "script.sh" au lieu de "./script.sh"

Mais ça change rien .. il m'affiche "marche pas" u_______u"