2012-12-10 15 views
7

Symfony2では、独自のコマンドラインコマンドを作成することができます。それらはコマンドラインからでもコントローラからでも実行できます。カスタムSymfony2コマンドをバックグラウンドで実行する方法

protected function execute(InputInterface $input, OutputInterface $output) 
{ 
    $command = $this->getApplication()->find('demo:greet'); 

    $arguments = array(
     ... 
    ); 

    $input = new ArrayInput($arguments); 
    $returnCode = $command->run($input, $output); 

} 

をしかし、このような状況で、我々は、それは実行だ終了し、リターンコードを返すようにコマンドを待つ:公式Symfony2のドキュメントによれば、そのように行うことができます。

コントローラのは、実行を待たずにバックグラウンドでコマンドを実行できますか? http://api.symfony.com/2.1/Symfony/Component/Console/Application.html

しかし、あなたが達成しようとしているものについては、私は思う:私はそのようなオプションがあるとは思わないのドキュメントによると

$ nohup php app/console demo:greet & 
+0

我々は最近、同じ問題に遭遇した、非常に多くの詳細を調査せずに[RabbitMQBundle](https://github.com/videlalvaro/RabbitMqBundle) – Squazic

答えて

5

と同等であるものつまり

use Symfony\Component\Process\Process; 

$process = new Process('ls -lsa'); 
$process->run(function ($type, $buffer) { 
    if ('err' === $type) { 
     echo 'ERR > '.$buffer; 
    } else { 
     echo 'OUT > '.$buffer; 
    } 
}); 

さらに、「実際のフィードバックを入手したい場合は-time、無名関数をrun()メソッドに渡します。あなたは、バックグラウンド・プロセスを作成したい場合はドキュメントから

http://symfony.com/doc/master/components/process.html

+1

を使用して、それを解決し、私は '$ PROCESS->スタートを使用してこれをしました() 'instaed of' $ process-> run() ' – malloc4k

+1

run()はstart()とwait()の呼び出しのようですので、あなたの場合はstartを使うべきです。 [link](https://github.com/symfony/Process/blob/master/Process.php) – cheesemacfly

6

が良く使用開始である()の代わりに()を実行します。あなたは、実行(とそれを作成した場合process_max_timeは)あなたのプロセスを殺すことができる

は「代わりに処理を実行する実行を()を使用して、あなたは)(それを起動することができます。run()をブロックし、プロセスが終了するのを待ちます、start()はバックグラウンドプロセスを作成します。 "

+0

process_max_timeについて詳述できますか?あなたの投稿を除き、Googleは関連する結果を返しません。 – gadelat

関連する問題