2011-07-21 10 views
1

このトピックには多くの記事がありますが、そこに記載されているすべての解決策は私には役に立たないようです。PHP exec(linux)でバックグラウンドプロセスを開始するには?

私はチャットクライアントを構築しています。バックグラウンドでプロセスを実行したままにしておくと、アカウント上の受信メッセージを待ち受けます。

ここでは、コードです:>を/ dev/null 2>を/ dev/null &よう

&> /dev/null & 

か:私はこの代わりにオプションのたくさんを試してみた

$command = "cd classes/chat/inc/ && /usr/bin/php5 client.php --mysql_server=localhost --mysql_username=root --mysql_password= --mysql_database=covide --gtalk_user=xxx --gtalk_password=xxx --user_id=".$_SESSION['user_id']." &> /dev/null &"; 
exec($command); 

> testoutput.php 2> echo $! (このフォーラムのさまざまな投稿から)、成功することはありませんでした。どのようにこれを修正すべきかについて誰かが考えていますか?

+1

まず、そのすべてが意味することを学ばなければなりません。それ以外の場合は、試してみるまで試してみる必要があります。 – hakre

+0

"私にとってはうまくいかない"とはどういう意味ですか? – KingCrunch

+0

バックグラウンドexec()関数内のPHPの重複可能性(0120-336-331) – hakre

答えて

2

私はちょうどこれの作業版を持っています。しかし、exec()を使う代わりに。バックグラウンドプロセスを実行するために、カールPOSTを使用します。問題はタイムアウトの制限です。あなたができることは、あなたのバックグラウンドプロセスを「着信メッセージを聞く」タスクで実行し、最後に別のインスタンスを呼び出して現在のインスタンスを閉じることです。

プロセスの始めにこれを使用して、途中で終了しないようにすることができますが、これは必要であることがわかりませんでした。 :

/* Close our connection with calling file */ 
while(ob_get_level()) ob_end_clean(); 
header('Connection: close'); 
ignore_user_abort(); 
ob_start(); 
echo('Running in the background.'); 
$size = ob_get_length(); 
header("Content-Length: $size"); 
ob_end_flush(); 
flush(); 
0

次のコマンドを実行すると、すぐに返す必要があります:

exec('nohup php otherscript.php > nohup.out & > /dev/null');

を使用すると、バックグラウンドスクリップの実行サイクルを管理する方法の詳細概要についてはこちらをfull answerをご覧ください。 t。

関連する問題