2016-04-03 7 views
4

ich einen Symfony Konsolenbefehl haben, die kontinuierlichStoppen eines Symfony-Konsole Befehl

protected function execute(InputInterface $input, OutputInterface $output) 
{ 
    //... 

    pcntl_signal(SIGHUP, [$this, 'stopCommand']); 

    $this->shouldStop = false; 

    while (true) { 


     pcntl_signal_dispatch(); 

     if ($this->shouldStop) { 
      break; 
     } 
     sleep(60); 
    } 
} 

protected function stopCommand() 
{ 
    $this->shouldStop = true; 
} 

ich Schleifen wünsche ich ihm von einem Controller

public function stopAction() 
{ 
    posix_kill(posix_getpid(), SIGHUP); 

    return new Response('ok'); 
} 

stoppen könnte, aber ich weiß nicht, warum es nicht funktioniert

Antwort

6

Es funktioniert wahrscheinlich nicht, da Konsolenbefehl in einem anderen Prozess als Controller-Aktion ausgeführt wird. Versuchen Sie, speichern PID Anzahl der Konsolenbefehl in die Datei zu Beginn der Ausführung mit so etwas wie:

file_put_contents("/tmp/console_command.pid", posix_getpid()); 

und dann diesen Code in Controller verwenden:

posix_kill(file_get_contents("/tmp/console_command.pid"), SIGHUP); 
Verwandte Themen