ホームページ >バックエンド開発 >PHPチュートリアル >[ Laravel 5.2 ドキュメント ] サービス -- タスクのスケジューリング
以前は、開発者はスケジュールする必要があるタスクごとに Cron エントリを作成する必要があり、これは頭痛の種でした。タスク スケジューラはソース管理にないため、SSH を使用してサーバーにログインし、これらの cron エントリを追加する必要があります。 Laravel コマンド スケジューラを使用すると、Laravel でコマンド スケジュールをスムーズかつ表現力豊かに定義でき、サーバー上に必要な Cron エントリは 1 つだけです。
タスクのスケジュールは、app/Console/Kernel.php ファイルのスケジュール メソッドで定義されており、このメソッドにはサンプルが既に含まれています。必要なスケジュール済みタスクをスケジュール オブジェクトに自由に追加できます。
スケジュールを有効にする
サーバーに追加する必要がある Cron エントリは次のとおりです:
* * * * * php /path/to/artisan schedule:run 1>> /dev/null 2>&1
この Cron は、Laravel コマンド スケジューラを毎分呼び出します。その後、Laravel はスケジュールされたタスクを評価し、期限が切れたタスクを実行します。
スケジュールされたすべてのタスクを AppConsoleKernel クラスのスケジュール メソッドで定義できます。始める前に、タスクのスケジュール設定の例を見てみましょう。この例では、毎日深夜に呼び出されるクロージャをスケジュールします。このクロージャでは、データベース クエリを実行してテーブルをクリアします。
<?phpnamespace App\Console;use DB;use Illuminate\Console\Scheduling\Schedule;use Illuminate\Foundation\Console\Kernel as ConsoleKernel;class Kernel extends ConsoleKernel{ /** * 应用提供的Artisan命令 * * @var array */ protected $commands = [ 'App\Console\Commands\Inspire', ]; /** * 定义应用的命令调度 * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(Schedule $schedule) { $schedule->call(function () { DB::table('recent_users')->delete(); })->daily(); }}
クロージャ呼び出しのスケジュールに加えて、アーティザン コマンドとオペレーティング システム コマンドもスケジュールできます。たとえば、コマンド メソッドを使用して Artisan コマンドをスケジュールできます:
$schedule->command('emails:send --force')->daily();
exec コマンドを使用して、オペレーティング システムにコマンドを送信できます:
$schedule->exec('node /home/forge/script.js')->daily();
2.1 共通のスケジュール オプション
もちろん、複数のスケジュールを割り当てることもできます。タスク:
メソッド ... | ->everyFiveMinutes(); |
---|---|
->everyTenMinutes(); | |
->everyThirtyMinute s(); | |
->hourly() | 1 時間ごとにタスクを実行します|
->daily(); | を実行します毎日午前 0 時にタスクを実行します|
タスクを毎日 13:00 に実行します | ->twiceDaily(1, 13);日の 1:00 と 13:00 |
-> 毎週 (); | タスクを週に 1 回実行します |
->monthly(); | ->quarly(); |
->yearly(); | 1 年に 1 回実行します|
これらのメソッドを追加の制約と組み合わせて、より詳細な制約を作成できます。たとえば、毎週月曜日にコマンドをスケジュールするには: | $schedule->call(function () { // 每周星期一13:00运行一次...})->weekly()->mondays()->at('13:00'); | 追加のスケジュール制約のリストを次に示します:
Method | Description |
->weekdays( ); | 平日のみタスクを実行します |
->sundays(); | 毎週タスクを実行します |
& gt;saturdays() ); | 毎週土曜日にタスクを実行する |
->when(Closure)
特定のテストに基づいてタスクを実行する