Bash - wywo

Konfiguracja serwerów, usług, itp.
rob2499
Posty: 5
Rejestracja: 11 maja 2010, 16:03

Bash - wywołanie skryptu przez PHP

Post 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.
Pacek
Beginner
Posty: 315
Rejestracja: 18 sierpnia 2009, 15:17
Lokalizacja: Gdynia

Post 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.
rob2499
Posty: 5
Rejestracja: 11 maja 2010, 16:03

Post autor: rob2499 »

Chyba bede musiac dodac tego uzytkownika. Moglbys mi przyblizyc troche jak dodac go do sudo?
Pacek
Beginner
Posty: 315
Rejestracja: 18 sierpnia 2009, 15:17
Lokalizacja: Gdynia

Post 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
rob2499
Posty: 5
Rejestracja: 11 maja 2010, 16:03

Post autor: rob2499 »

Wyskakuje blad o tresci:

Kod: Zaznacz cały

-bash: www-data: command not found
Chyba czegos brakuje, ale czego?
Pacek
Beginner
Posty: 315
Rejestracja: 18 sierpnia 2009, 15:17
Lokalizacja: Gdynia

Post autor: Pacek »

Uruchom:

Kod: Zaznacz cały

visudo
I tam dopiero wprowadź:

Kod: Zaznacz cały

www-data    ALL=NOPASSWD: /bin/hello.sh
rob2499
Posty: 5
Rejestracja: 11 maja 2010, 16:03

Post 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.
sappa
Beginner
Posty: 148
Rejestracja: 08 sierpnia 2006, 15:09

Post 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.
kaworu
Posty: 72
Rejestracja: 05 lutego 2009, 20:20

Post autor: kaworu »

Zainteresuj się http://www.suphp.org/
rob2499
Posty: 5
Rejestracja: 11 maja 2010, 16:03

Post 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
ODPOWIEDZ