Strona 1 z 1

Bash - wywołanie skryptu przez PHP

: 11 maja 2010, 16:10
autor: rob2499
Mam pewien problem z wywołaniem skryptu bash, przez php.

A mianowicie chcę zrobić skrypt po stronie serwera www, który wywoła odpowiednie polecenia, aby uruchomić określony program.

costam.php

Kod: Zaznacz cały

<?PHP
shell_exec('cd /bin');
shell_exec('hello.sh');
?>


hello.sh

Kod: Zaznacz cały

#!/bin/bash
cd /root/ventrilo
screen -AmdS vt ./ventrilo_srv
Gdy wywołam plik hello.sh przez konsolę to uruchamia normalnie proces. Natomiast gdy chcę zrobić to przez skrypt php nie idzie coś. Prawa dostępu dla pliku hello.sh ustawiłem na 755.

Proszę o pomoc.

: 13 maja 2010, 15:42
autor: Pacek
Takie wywołanie skryptu nie ma sensu, ponieważ dwie komendy shell_exec nie są mówiąc skrótowo wykonane w jednej sesji. Pierwsza polecenie zmieni folder na /bin, a drugie będzie uruchamiała hello.sh najpewniej z katalogu głównego / lub katalogu głównego witryny na której jest plik php. Najlepiej byłoby wykonać:

Kod: Zaznacz cały

shell_exec('/bin/hello.sh');
Ponadto do niektórych poleceń użytkownik apache'a (bo taki będzie uruchamiał skrypt - w debianie użytkownik www-data) nie ma dostępu. Możliwe, że będzie konieczność dodania użytkownika www-data do sudoers.

: 13 maja 2010, 17:25
autor: rob2499
Chyba bede musiac dodac tego uzytkownika. Moglbys mi przyblizyc troche jak dodac go do sudo?

: 14 maja 2010, 08:08
autor: Pacek
Do dodawania użytkowników do sudoers służy visudo. Powinieneś wprowadzić:

Kod: Zaznacz cały

www-data    ALL=NOPASSWD: /bin/hello.sh

: 14 maja 2010, 13:04
autor: rob2499
Wyskakuje blad o tresci:

Kod: Zaznacz cały

-bash: www-data: command not found
Chyba czegos brakuje, ale czego?

: 14 maja 2010, 13:48
autor: Pacek
Uruchom:

Kod: Zaznacz cały

visudo
I tam dopiero wprowadź:

Kod: Zaznacz cały

www-data    ALL=NOPASSWD: /bin/hello.sh

: 14 maja 2010, 16:17
autor: rob2499
Zrobiłem wszystko to o czym mówiłeś, lecz nadal coś nie działa. Myślę, że to będzie przez to, że program ma działać w tle, czyli, po zakończeniu wykonania skryptu ma on działać dalej.

: 15 maja 2010, 19:59
autor: sappa
Jeśli już dopisałeś tą linijkę do sudoers to teraz odpalaj to przez

Kod: Zaznacz cały

shell_exec('sudo  /bin/hello.sh');
 
I patrz w /var/log/auth.log czy uruchomienie się powiodło czy nie.

: 15 maja 2010, 23:50
autor: kaworu
Zainteresuj się http://www.suphp.org/

: 16 maja 2010, 19:37
autor: rob2499

Kod: Zaznacz cały

May 17 05:28:51 226 sudo: www-data : TTY=unknown ; PWD=/var/www/apache2-default ; USER=root ; COMMAND=/bin/hello.sh
May 17 05:29:01 226 CRON[29831]: (pam_unix) session opened for user root by (uid=0)
May 17 05:29:01 226 CRON[29831]: (pam_unix) session closed for user root