2011-02-08 11 views
8

私はそこにたくさんの類似の記事があると思いますが、まだ検索しても解決策が見つかりませんでした。shell_exec nohupを使ったPHP

基本的に、私はバックグラウンドで2つのスクリプトを実行しようとしています。私はコマンドラインでそれらを実行すると、私は私の最初のスクリプトを呼び出した後に参照してください。私は同じ結果と...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を使用していますか?これは奇妙なものです。 –

2

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

?> 

この私のワーキングサンプルページは次のとおりです。 ()****http://affiliateproductpromotions.net/pop.php*****()

+1

'popen( 'nohup ...&'、 'r')'は、OS XとHerokuの私のために働いている唯一の方法です。孤立したバックグラウンドプロセスを実行するための他の大量のソリューションsymfony、Cocur、et alは失敗しました(実行をブロックするか、親が死んだときに死ぬでしょう)。 –

関連する問題