2011-02-08 14 views
8

Myślę, że jest mnóstwo podobnych postów, ale nie znalazłem jeszcze rozwiązania po przeszukaniu.Shell_exec php z nohup

Zasadniczo próbuję uruchomić dwa skrypty w tle. Kiedy uruchomić je w wierszu polecenia, widzę po wywołaniu mój pierwszy skrypt:

/usr/bin/nohup php script.php > nohupoutput.log & echo $! 

Próbowałem ...script.php > /dev/null & z takim samym skutkiem. Otrzymuję:

/usr/bin/nohup: ignoring input and redirecting stderr to stdout 

którą ignoruję i uruchamiam drugi. Zauważyłem, że wydawało się być wiszące tam, i naciskając Wprowadź przywróciło mnie do machine:~folder>

/usr/bin/nohup php script2.php > nohupoutput.log & echo $! 

Oba skrypty działają. Próbowałem następnie przekonwertować to na komendę shell_exec i nic nie działa. Podejrzewam, że bit ignoring input powoduje trudności, ale nie jestem pewien. Niezależnie od tego następujące czynności nie działają. To po prostu wisi w przeglądarce:

$output = shell_exec('/usr/bin/nohup php script.php > /dev/null &'); 
$output = shell_exec('/usr/bin/nohup php script2.php > /dev/null &'); 

Odpowiedz

9

Spróbuj:

$output = shell_exec('/usr/bin/nohup php script.php >/dev/null 2>&1 &'); 

Lub:

exec('/usr/bin/nohup php script.php >/dev/null 2>&1 &'); 
+0

Dostaję niejednoznaczne wyjściowy przekierowanie gdy próbuję zarówno w linii poleceń. – Rio

+0

którego używasz i wersji PHP? to jest dziwne. –

2

ta praca shoul:

shell_exec('nohup /usr/bin/php path/to/script.php > output.txt &'); 
2
this would help you dude.. 


<?php 

function execInBackground($cmd) { 
    if (substr(php_uname(), 0, 7) == "Windows"){ 
     pclose(popen("start /B ". $cmd, "r")); 
    } 
    else { 
     exec($cmd . " > /dev/null &"); 
    } 
} 
//take note: to get your PHP_PATH, try looking at your phpinfo :) 
echo execInBackground("/usr/local/php53/bin/php 'example2.php'"); 

?> 

ten moja strona próbka robocza: () ****http://affiliateproductpromotions.net/pop.php*****()

+1

'popen ('nohup ... &', 'r')' to jedyna metoda, która działa dla mnie zarówno w systemie OS X, jak i Heroku. Mnóstwo innych rozwiązań do uruchamiania oddzielnych procesów w tle, w tym. Symfony, Cocur i inni nie udało się (zablokowane wykonanie lub umarłoby, gdy rodzic umrze). –

Powiązane problemy