web-dev-qa-db-ja.com

Laravel 5スケジュールが機能していません

私のlaravelバージョンは5.0.28で、cloud9でビルドして、このコマンドをcronに追加しました:

#!/bin/bash
PATH=/usr/bin
* * * * * php /home/ubuntu/workspace/app/artisan scheduled:run 1>> /dev/null 2>&1

このコードをKernel.phpに追加しました。私はこのサイトを参照しました: https://laravel-news.com/2014/11/laravel-5-scheduler/

<?php namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use App\Http\Controllers\ApiController;

class Kernel extends ConsoleKernel {

    protected $commands = [
        'App\Console\Commands\Inspire',
    ];

    protected function schedule(Schedule $schedule)
    {
        $schedule->call('ApiController@test_job')->hourly();
    }
}

私は待ったがそれでもうまくいかなかったので、コマンドphp artisan schedule:runを使用しようとしたところ、No scheduled commands are ready to run.が得られた。

私はこの回答を検索して見つけました: Laravel 5 "Class does not exist" when the scheduler using

そこで、コードを変更しました。また、このコードには時間が指定されていなかったため、cronを変更して時間を指定しましたが、それでも機能しません。もうアイデアはありません。助けてください。ありがとう。

コード

$schedule->call(join('@', [ApiController::class, 'test_job']));

cron

0 0,3,6,9,12,15,18,21 * * * php /home/ubuntu/workspace/app/artisan schedule:run 1>> /dev/null 2>&1
30 1,4,7,10,13,16,19,22 * * * php /home/ubuntu/workspace/app/artisan schedule:run 1>> /dev/null 2>&1
9
lighter

Laravelスケジューラー は、コントローラーメソッドではなく、コマンドで機能します。

  1. 作成コマンド:
php artisan make:command PurchasePodcast
  1. 編集コマンド:
namespace App\Console\Commands;

use Illuminate\Console\Command;

class PurchasePodcast extends Command
{
    protected $name = 'purchase:podcast';

    public function fire()
    {
        // do stuff here
    }
}
  1. Console\Kernel.phpにコマンドを追加:
protected $commands = [
    'App\Console\Commands\PurchasePodcast',
];
  1. スケジューラでコマンドを使用します。
$schedule->command('purchase:podcast')->hourly();
9
Limon Monte

最初に、サーバーまたはローカルホストタイプでcronが実行されているかどうかをテストします。

> Sudo service cron status

インストールされていない場合:

> Sudo apt-get install cron

laravelのスケジューラを有効にするには:

> crontab -e

vimが直接開かない場合は、エディターを選択できます。下の行に必ず入力してください。

* * * * * php /path_from_root_to_laravel_proj_folder/artisan schedule:run 1>> /dev/null 2>&1

laravelスケジューラーの内部にセットアップがあるかどうかをテストするには、プロジェクトフォルダーからこれを実行します。

>php artisan schedule:run

これでタスクが実行され、何が行われているかがわかります。

15
Grigoreas P.

原因を見つけるにはいくつかの側面があります。まず、config/app.phpの「タイムゾーン」が正しく設定されているかどうかを確認します。 Laravelは、php.iniで設定済みであってもタイムゾーンをリセットします。次に、crontabが期待どおりに機能していることを確認します。「準備ができているスケジュールがありません」というメッセージが表示された場合、 crontabが実行されており、phpおよびartisanコマンドを検出できます。

1
lydiacx

@limonteの回答を完了するには、create Consoleコマンドは次のようになります。

php artisan make:console CampaignsCollect --command=campaigns:collect

ここで参照: link

0
Eugen Zaharia