2017-03-15 10 views
0

私はsymfony 3フレームワークをpheanstalk phpライブラリと併用しています。 Linux Debian Jesseを使ってサーバー上でアプリケーションを実行します。雇用創出はうまくいきます。ターミナルから労働者を派遣するのであれば、それはうまくいくはずです。しかし、私がcrontabにコマンドを追加すると、コマンドが機能しないことがわかります。/var/main/userにデバッグに役立つログはありません。私はどんな助けも非常にうれしく思います。Crontabはphpコマンドを実行しません

public function fetchQueue($tubeName) 
{ 
    if ($this->pheanstalk->getConnection()->isServiceListening()) { 
     while (true === is_object($job = $this->pheanstalk->watch($tubeName)->ignore('default')->reserve(self::WATCH_TIMEOUT))) { 
      $data = json_decode($job->getData(), true); 
      $this->worker($data); 
      $this->pheanstalk->delete($job); 
     } 
    } 
} 

:これは、キューからのジョブを取得し、コマンドを実行するために私のapp.queue_manager機能が

protected function execute(InputInterface $input, OutputInterface $output) 
{ 
    $output->writeln("\n<info>Beanstalk worker service started</info>"); 
    $tubes = $this->getContainer()->get('app.job_manager.power_plant')->getTubes(); 
    if ($input->getOption('one-check')) { 
     // run once 
     foreach ($tubes as $tubeName) { 
      if ($tubeName != "default") { 
       $this->getContainer()->get('app.queue_manager')->fetchQueue($tubeName); 
      } 
     } 
     $output->writeln("\n<info>Beanstalk worker completed check and stoped</info>"); 
    } else { 
     // run forever 
     set_time_limit(0); 
     max_execution_time(0); 
     while (1) { 
      foreach ($tubes as $tubeName) { 
       if ($tubeName != "default") { 
        $this->getContainer()->get('app.queue_manager')->fetchQueue($tubeName); 
       } 
      } 
     } 
     $output->writeln("\n<info>Beanstalk worker stoped</info>"); 
    } 
} 

次のとおりです。

は、これは私のワーカーコマンド(のみ実行機能)でありますコマンドを実行する作業者

public function worker($data) 
{ 
    $application = new Application($this->kernel); 
    $application->setAutoExit(false); 

    $parameters = []; 
    $parameters['command'] = $data['command']; 
    foreach ($data['meta'] as $key => $param) { 
     $parameters[$key] = $param; 
    } 

    $input = new ArrayInput($parameters); 
    $output = new NullOutput(); 

    return $application->run($input, $output); 
} 

は、これは動作しません、私のcrontabです:

@reboot /usr/bin/php /var/www/mose-base/bin/console beanstalk:worker:start 

私はOK働く別のcronのタブを作成しました。それは15分ごとに働きますが、違いは無限ループ(while(1))を持たないからです。しかし、それは私が望むものではありません。私は最初のcrontabでそれを作成したように、すべての時間を働く無限ループをしたい:

*/15 * * * * /usr/bin/php /var/www/mose-base/bin/console beanstalk:worker:start --one-check 
+0

ジョブのスタートアップをrc.localのようなものに置きます。私が読んだところから、@リブートはリブート時にのみ起こり、フルパワーダウンでは起こらない。 – FreudianSlip

+0

私もこれを試しました。しかしそれは同じです。 ps -eLfでコマンドを実行しているのが見えますが、ジョブが削除されて実行されないため、コマンドが実行されません... – sanof

+0

'入力'ストリームがないためプログラムが失敗しますか? – FreudianSlip

答えて

0

にメールでエラーを報告することができます。それは問題を解決する。 Tnx FreudianSlip

0

それはコンソールで動作する場合、それはあなたのファイルのユーザー権限では動作しません。それを確認してください。

私はrc.localを使用し、この仕事

*/15 * * * * /usr/bin/php /var/www/mose-base/bin/console beanstalk:worker:start --one-check 2>&1 | mail -s "mysql_dump" [email protected] 
関連する問題