2011-02-08 5 views
8

비슷한 게시물이 많다고 생각하지만 아직 검색 한 후에 해결책을 찾지 못했습니다.nohup을 사용하는 Shell_exec PHP

기본적으로 백그라운드에서 두 개의 스크립트를 실행하려고합니다. 내가 명령 줄에서 실행할 때, 나는 내 첫 번째 스크립트를 호출 한 후 참조 : 나도 같은 결과 ...script.php > /dev/null &을 시도했습니다

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

. 나는 다음을 얻는다 :

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

나는 그것을 무시하고 두 번째 것을 실행한다. 나는 거기에 매달려 및를 입력 누르는 것 같았다 machine:~folder> 두 스크립트가 작동

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

다시 나를 데리고 것으로 나타났습니다. 나는 shell_exec 명령으로 변환하려고 시도했지만 아무것도 작동하지 않는 것 같습니다. ignoring input 비트가 문제를 일으키는 것으로 생각되지만 확실하지 않습니다. 어쨌든 다음은 작동하지 않습니다. 그것은 단지 브라우저에 응답 :

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

답변

9

시도 :

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

또는 :

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

내가 명령 줄에 둘 때 나는 모호한 출력 리디렉션을 얻고있다. – Rio

+0

당신이 사용하고있는 os와 PHP 버전은 무엇입니까? 이것은 이상한 것이다. –

2

이 말아야 작업 :

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'"); 

?> 

이 내 작업 샘플 페이지는 다음과 같습니다 () ****http://affiliateproductpromotions.net/pop.php*****()

+1

'popen ('nohup ... &', 'r')'은 OS X와 ​​Heroku에서 저에게 효과가있는 유일한 방법입니다. 분리 된 백그라운드 프로세스를 실행하는 데 필요한 다양한 솔루션 Symfony, Cocur, et al은 실패했습니다 (실행이 차단되었거나 부모가 죽으면 사망합니다). –