私の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
Laravelスケジューラー は、コントローラーメソッドではなく、コマンドで機能します。
php artisan make:command PurchasePodcast
namespace App\Console\Commands;
use Illuminate\Console\Command;
class PurchasePodcast extends Command
{
protected $name = 'purchase:podcast';
public function fire()
{
// do stuff here
}
}
Console\Kernel.php
にコマンドを追加:protected $commands = [
'App\Console\Commands\PurchasePodcast',
];
$schedule->command('purchase:podcast')->hourly();
最初に、サーバーまたはローカルホストタイプで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
これでタスクが実行され、何が行われているかがわかります。
原因を見つけるにはいくつかの側面があります。まず、config/app.phpの「タイムゾーン」が正しく設定されているかどうかを確認します。 Laravelは、php.iniで設定済みであってもタイムゾーンをリセットします。次に、crontabが期待どおりに機能していることを確認します。「準備ができているスケジュールがありません」というメッセージが表示された場合、 crontabが実行されており、phpおよびartisanコマンドを検出できます。
@limonteの回答を完了するには、create Consoleコマンドは次のようになります。
php artisan make:console CampaignsCollect --command=campaigns:collect
ここで参照: link