0

Laravel 4.2 にIndatus/dispatcherを使用しています。これは基本的に Cron ジョブ ベースのタスク スケジューラです。

Cron ジョブを毎分実行しようとしていますが、ライブ サーバーでこのエラーが発生しています (ただし、ローカル マシンでは問題なく動作します)。これが私がやったことです:

<?php

use Indatus\Dispatcher\Scheduling\ScheduledCommand;
use Indatus\Dispatcher\Scheduling\Schedulable;
use Indatus\Dispatcher\Drivers\Cron\Scheduler;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;

class TestCommand extends ScheduledCommand {

    /**
     * The console command name.
     *
     * @var string
     */
    protected $name = 'command:check';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Check if the meberships are verified.';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /** 
     * When a command should run
     *
     * @param Scheduler $scheduler
     * @return \Indatus\Dispatcher\Scheduling\Schedulable
     */
    public function schedule(Schedulable $scheduler)
    {
        return $scheduler->everyMinutes(1);
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function fire()
    {
        Log::info('I was here @ ' . date('H:i:s'));
    }

    /**
     * Get the console command arguments.
     *
     * @return array
     */
    protected function getArguments()
    {
        return array(
            // array('example', InputArgument::REQUIRED, 'An example argument.'),
        );
    }

    /**
     * Get the console command options.
     *
     * @return array
     */
    protected function getOptions()
    {
        return array(
            // array('example', null, InputOption::VALUE_OPTIONAL, 'An example option.', null),
        );
    }

}

つまり、基本的には、スケジューラが実行されるたびに、ログ ファイル (つまりStorage/laravel.log ) に 1 行を書き込むだけです。ローカル マシンで実行php artisan scheduled:runすると、ログ ファイルに新しい行が書き込まれます。

これで、サーバーにコードをアップロードし、Cron ジョブを次のように作成しました。

[http://awesomescreenshot.com/09a64zii1f](http://awesomescreenshot.com/09a64zii1f)

Cron ジョブは予想どおり毎分実行され、ログ ファイルも毎分更新されますが、ログ ファイルに書き込んでいるメッセージの代わりに、次のエラーが毎分書き込まれます。

[2016-09-24 09:20:01] production.ERROR: 例外 'InvalidArgumentException' とメッセージ 'コマンド "command:check" が定義されていません。

これのことですか?

/home/mhjamil/public_html/l4-cron/test/vendor/symfony/console/Symfony/Component/Console/Application.php:564 のコマンド:make'

Stack trace:
 #0 /home/mhjamil/public_html/l4-cron/test/vendor/symfony/console/Symfony/Component/Console/Application.php(190): Symfony\Component\Console\Application->find('command:check')
 #1 /home/mhjamil/public_html/l4-cron/test/vendor/symfony/console/Symfony/Component/Console/Application.php(124): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
 #2 /home/mhjamil/public_html/l4-cron/test/artisan(58): Symfony\Component\Console\Application->run()
 #3 {main} [] []`

ちなみに、コマンドはapp/start/artisan.phpに次のように登録しました。

Artisan::add(new TestCommand);

また、コマンドphp artisan command:checkはローカル マシンで正常に実行されますが、サーバーにアップロードするとCommand "command:check" is not defined と表示されます。


もう1つ、サーバーにルートを追加して実行しましたArtican::call("command:check");。このページをリロードするたびに、ログ ファイルにエントリが正常に記録されます。しかし、cronジョブを介して実行するとエラーが発生します。したがって、問題はcronジョブまたはサーバー設定に多少関連していると推測しています。


cron コマンドを次のように変更しようとしました。

/usr/bin/php /home/mhjamil/public_html/l4-cron/test/artisan command:check 1>> /dev/null 2>&1

以前は使用してschaduled:runいましたが、まだ同じ問題です:(

4

0 に答える 0