2012-10-11 15 views
14

Szukałem dużo, aby znaleźć dokładną odpowiedź, ale nie znalazłem.php proces w tle za pomocą funkcji exec

wiele osób wspomniało, że powinniśmy na końcu polecenia, aby nie czekać na odpowiedź.
na przykład do uruchomienia bg.php w tle, to było zalecane:

exec("/usr/bin/php bg.php &"); 

ale to nie działa dla mnie. a główny skrypt czeka na pełne wykonanie bg.php.

Czytałem również gdzieś napisać dane wyjściowe bg.php w pliku logu, ale mój skrypt tła nie generuje żadnych wyników. Wykonuje pewien proces, a następnie zapisuje coś w bazie danych.

Po prostu chcę, aby mój skrypt uruchamiał bg.php i nie czekam, aż się skończy.

proszę pomóż mi w tym poprawny kod.

Odpowiedz

18

Musisz przekierować wyjście programów gdzieś też zwykle/dev/null

exec($cmd . " > /dev/null &"); 
+0

działa dobrze! ale czym jest katalog/dev/null? czy to polecenie zapisuje dane wyjściowe do pliku? – Aliweb

+1

/dev/null po prostu odrzuca dane do niego wysłane, możesz ewentualnie przekierować je do jakiegoś pliku, jeśli potrzebujesz wyjścia programu – ninaj

0

Czy uważane za pomocą ekranu? Możesz uruchomić sesję screen, która działa w oddzielnym procesie.

screen -d -m -S my_bg_session /usr/bin/php bg.php 

Następnie można podłączyć do niego później, jeśli nadal działa:

screen -r my_bg_session 
Powiązane problemy