私は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
ジョブのスタートアップをrc.localのようなものに置きます。私が読んだところから、@リブートはリブート時にのみ起こり、フルパワーダウンでは起こらない。 – FreudianSlip
私もこれを試しました。しかしそれは同じです。 ps -eLfでコマンドを実行しているのが見えますが、ジョブが削除されて実行されないため、コマンドが実行されません... – sanof
'入力'ストリームがないためプログラムが失敗しますか? – FreudianSlip