Linux executer un script bash avec php exec

Fermé
xunil2003 Messages postés 761 Date d'inscription mercredi 17 novembre 2004 Statut Membre Dernière intervention 24 mars 2024 - Modifié par xunil2003 le 1/07/2012 à 16:00
 Nesquiik - 21 févr. 2013 à 21:16
Bonjour,

Sous linux j'ai besoin executer un script bash avec php

Voici ma page php
<?php          
echo exec('/home/serveur/Domotique/ordres/e1-on.sh');          
sleep(20);          
echo exec('/home/serveur/Domotique/ordres/e1-off.sh');          
?>


Le script bash : e1-on.sh
#!/bin/bash          

execution1="cm15 E1 on"          
execution2="aplay /home/serveur/Domotique/x10/son-confirmation/wav/lumiere-salle-informatique-allume.wav"          
executable="e1-on"          

case "$PROGRAMME" in          
Asterisk) programme=Asterisk ;;          
Crontab) programme="Crontab" ;;          
php) programme="php" ;;          
"") programme="Script bash" ;;          
esac          

utilisateur=$(whoami)          
date1=$(date +'%Y-%m')          
date2=$(date +'%d-%m-%Y - %H:%M:%S')          
$execution1          
echo "$date2 - $utilisateur - $execution1 - $executable - $programme" >> /home/serveur/Domotique/rapports/ordres/$date1-rapport-ordres.log          
$execution2


Ce que je ne comprend pas c'est que lorsque php execute le script bash
e1-on.sh
seulement
execution1
est executé dans le script bash alors que le reste du script non , il n'écrit pas dans le log et la lecture du son n'est pas lu.

Parcontre depuis le terminal lorsque je tape
./home/serveur/Domotique/ordres/e1-on.sh
le script fonctionne correctement.

Exrait du fichier /var/log/apache2/error.log
root@debian:~# cat /var/log/apache2/error.log     
/home/serveur/Domotique/ordres/e1-on.sh: line 18: /home/serveur/Domotique/rapports/ordres/2012-07-rapport-ordres.log: Permission denied     
ALSA lib confmisc.c:768:(parse_card) cannot find card '0'     
ALSA lib conf.c:4170:(_snd_config_evaluate) function snd_func_card_driver returned error: No such file or directory     
ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings     
ALSA lib conf.c:4170:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory     
ALSA lib confmisc.c:1251:(snd_func_refer) error evaluating name     
ALSA lib conf.c:4170:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory     
ALSA lib conf.c:4649:(snd_config_expand) Evaluate error: No such file or directory     
ALSA lib pcm.c:2190:(snd_pcm_open_noupdate) Unknown PCM default     
aplay: main:654: audio open error: No such file or directory     
/home/serveur/Domotique/ordres/e1-off.sh: line 18: /home/serveur/Domotique/rapports/ordres/2012-07-rapport-ordres.log: Permission denied     
ALSA lib confmisc.c:768:(parse_card) cannot find card '0'     
ALSA lib conf.c:4170:(_snd_config_evaluate) function snd_func_card_driver returned error: No such file or directory     
ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings     
ALSA lib conf.c:4170:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory     
ALSA lib confmisc.c:1251:(snd_func_refer) error evaluating name     
ALSA lib conf.c:4170:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory     
ALSA lib conf.c:4649:(snd_config_expand) Evaluate error: No such file or directory     
ALSA lib pcm.c:2190:(snd_pcm_open_noupdate) Unknown PCM default     
aplay: main:654: audio open error: No such file or directory     
root@debian:~# 


Quand je me conncete sur sur www-data c'est pareil
root@192.168.0.1's password:    
Linux debian 2.6.39.4 #1 PREEMPT Sat Apr 7 16:02:44 UTC 2012 armv5tel   

The programs included with the Debian GNU/Linux system are free software;   
the exact distribution terms for each program are described in the   
individual files in /usr/share/doc/*/copyright.   

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent   
permitted by applicable law.   
You have mail.   
Last login: Sun Jul  1 12:48:47 2012 from 192.168.0.2   
root@debian:~# su - www-data   
$ pwd   
/var/www   
$ whoami   
www-data   
$ aplay /home/serveur/Domotique/x10/son-confirmation/wav/lumiere-salle-informatique-allume.wav   
ALSA lib confmisc.c:768:(parse_card) cannot find card '0'   
ALSA lib conf.c:4170:(_snd_config_evaluate) function snd_func_card_driver returned error: Aucun fichier ou dossier de ce type   
ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings   
ALSA lib conf.c:4170:(_snd_config_evaluate) function snd_func_concat returned error: Aucun fichier ou dossier de ce type   
ALSA lib confmisc.c:1251:(snd_func_refer) error evaluating name   
ALSA lib conf.c:4170:(_snd_config_evaluate) function snd_func_refer returned error: Aucun fichier ou dossier de ce type   
ALSA lib conf.c:4649:(snd_config_expand) Evaluate error: Aucun fichier ou dossier de ce type   
ALSA lib pcm.c:2190:(snd_pcm_open_noupdate) Unknown PCM default   
aplay: main:654: audio open error: Aucun fichier ou dossier de ce type   
$    
$    
$ echo "$date2 - $utilisateur - $execution1 - $executable - $programme" >> /home/serveur/Domotique/rapports/ordres/$date1-rapport-ordres.log           
-su: cannot create /home/serveur/Domotique/rapports/ordres/-rapport: Permission denied   
$ 


Pourquoi ?
Comment puis je faire ?

Voila comment j'ai rèsolut mon problème
Avec dolphin j'était dans le dossier "/usr/bin/" puis j'ai fait un clique droit sur le fichier "aplay" puis j'ai cliquer sur "Propriété" et sur l'onglet "Droits d'accèes" puis sur le bouton "Droit d'accès avancés" la j'ai cocher les cases "Donner l'UID et Donner le GID" puis j'ai cliqué sur ok et encore sur ok.

Ensuite avec Avec dolphin j'était dans mon dossier ou ce trouve mon fichier log "/home/serveur/Domotique/rapports/ordres/" puis j'ai fait un clique droit sur le fichier log "2012-07-rapport-ordres.log" puis j'ai cliquer sur "Propriété" et sur l'onglet "Droits d'accèes" puis sur le bouton "Droit d'accès avancés" la j'ai cocher les cases "à écriture Groupe et Autres" puis j'ai cliqué sur ok et encore sur ok.

voici les droit du fichier
-rw-rw-rw- 1 serveur serveur  1129  1 juil. 15:47 2012-07-rapport-ordres.log


J'ai donc une question, dans mon script le fichier ce crée tout seul ci la date change, l'année et le mois en cour (2012-07)
echo "$date2 - $utilisateur - $execution1 - $executable - $programme" >> /home/serveur/Domotique/rapports/ordres/$date1-rapport-ordres.log

comment dois je faire pour qu'il est les droit suivant avec mon script.
-rw-rw-rw- 1 serveur serveur  1129  1 juil. 15:47 2012-07-rapport-ordres.log


Merci

A voir également:

3 réponses

-----geo----- Messages postés 333 Date d'inscription jeudi 7 juin 2012 Statut Membre Dernière intervention 29 mai 2014 58
16 juil. 2012 à 01:40
ouvre un shell tu te met ds le répertoire ou ya ton script et tu fais:

chmod 777 nom_de_ton_script
0
rescue Messages postés 1039 Date d'inscription vendredi 16 novembre 2007 Statut Contributeur Dernière intervention 27 mars 2019 136
16 juil. 2012 à 11:18
Bonjour,

Sauf erreur de ma part et en espérant avoir tout compris !
Tu ne pourras pas exécuter un script shell qui se trouve dans une homedirectory avec PHP. Permission non autorisée.

1 - Il faut que le script soit dans le dossier de ton serveur web.
2 - L'utilisateur www-data en soit le propriétaire.
3 - pour être tranquille www-data doit exécuter le script en root.

Ce qui veut dire qu'il faudra éditer le fichier sudoers avec la commande : sudo visudo
Ajouter www-data comme utilisateur sans demander le mot de passe.
Faire très attention car c'est un fichier fragile faire une copie de sauvegarde avant.

@+
0
je deterre un peut mais a tu reussi a faire marcher le aplay depuis ton php car j'ai la meme erreur que toi
0