2012-12-10 30 views
7

Symfony2 cho phép các nhà phát triển tạo các lệnh dòng lệnh riêng của họ. Chúng có thể được thực hiện từ dòng lệnh, mà còn từ bộ điều khiển. Theo tài liệu chính thức của Symfony2, bạn có thể thực hiện như sau:Cách chạy lệnh Symfony2 tùy chỉnh trong nền

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

    $arguments = array(
     ... 
    ); 

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

} 

Nhưng trong trường hợp này, chúng tôi chờ lệnh hoàn thành và thực hiện trả lại mã trả về.

Làm cách nào để có thể, từ bộ điều khiển, thực hiện lệnh đặt nó lên nền mà không cần đợi để hoàn thành quá trình thực thi?

Nói cách khác những gì sẽ là tương đương với

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

Chúng tôi vừa mới chạy vào cùng một vấn đề và giải quyết nó bằng cách sử dụng [RabbitMQBundle] (https://github.com/videlalvaro/RabbitMqBundle) – Squazic

Trả lời

5

Theo tài liệu tôi không nghĩ rằng có một tùy chọn như: http://api.symfony.com/2.1/Symfony/Component/Console/Application.html

Nhưng liên quan đến những gì bạn đang cố gắng để đạt được, tôi nghĩ bạn nên sử dụng thành phần quá trình thay thế:

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; 
    } 
}); 

Và như đã đề cập trong tài liệu "nếu bạn muốn có thể nhận được một số phản hồi trong thực tế -time, chỉ cần chuyển một hàm ẩn danh cho phương thức run() ".

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

+1

Nếu không có điều tra chi tiết rất nhiều, tôi đã sử dụng '$ process-> start này() 'instaed của' $ process-> run() ' – malloc4k

+1

Có vẻ như run() gọi start() và sau đó wait() để trong trường hợp bạn đúng, bạn nên sử dụng start. [link] (https://github.com/symfony/Process/blob/master/Process.php) – cheesemacfly

6

Từ các tài liệu là tốt hơn sử dụng start() thay vì chạy() nếu bạn muốn tạo một tiến trình nền. Process_max_time có thể giết chết quá trình của bạn nếu bạn tạo nó với run()

"Thay vì sử dụng run() để thực thi một tiến trình, bạn có thể bắt đầu() nó: run() đang chờ và chờ quá trình kết thúc , start() tạo ra một quá trình nền. "

+0

Bạn có thể xây dựng trên process_max_time không? Google không trả lại bất kỳ kết quả có liên quan nào cho điều này ngoại trừ bài đăng của bạn. – gadelat

Các vấn đề liên quan