2016-04-26 6 views
0

ich den folgenden Code bin mit bash-Befehlemv Befehl nicht von Bash-Skript arbeiten php

shell_exec("sudo sh script.sh $conf_file"); 

Der $config_file hält den Wert von zB abc.conf

In meiner script.sh Datei ausführen

#!/bin/bash 
mv $1 /etc/apache2/sites-available/ 

Ich habe auch die Erlaubnis gegeben, dass www-data Benutzer sudo ohne Passwort zu sudo visudo gehen und die folgende Zeile zuletzt eingefügt

www-data ALL=NOPASSWD: /var/www/html/myapp/script.sh 
+0

Anmerkung Sie Berechtigungen geben die Aktion '/ var/www/html/myapp/script.sh', auszuführen, während Sie' sh script.sh' ausgeführt werden. – fedorqui

+0

, also rufe ich diesen PHP-Code im selben Verzeichnis an. Es ist schließlich der gleiche Weg? –

+0

Es ist der gleiche Pfad, aber sudoers prüft exakte Zeichenfolgen, also müssen Sie den vollständigen Pfad schreiben. – fedorqui

Antwort

2

Sie führen sh von sudo, nicht /var/www/html/myapp/script.sh ein. Es ist auch seltsam, warum Sie script.sh von sh ausführen, wenn Ihr Skript mit Zeile #!/bin/bash beginnt. versuchen Sie einfach zu ändern shell_exec zu:

shell_exec("sudo /var/www/html/myapp/script.sh $conf_file"); 
+0

Der vollständige Pfad (oder zumindest der relative Pfad) ist hier sowohl für 'sudo' als auch für das tatsächlich gefundene Skript notwendig. –

+0

Das Entfernen von sh führt meinen Befehl nicht aus: s –

+0

Ist in Ihrem Skript das Ausführungsbit gesetzt? –