目次
タスクのスケジュール
はじめに
避免任务重叠
任务输出
任务钩子
ホームページ バックエンド開発 PHPチュートリアル Laravel の基本的なチュートリアル - タスクの計画

Laravel の基本的なチュートリアル - タスクの計画

Jun 23, 2016 pm 01:01 PM

タスクのスケジュール

はじめに

以前は、開発者はスケジュールされたタスクを入力するために手動でスケジュールに行を追加する必要がありました。これらのことを行うにはリモート サーバーに手動でログインする必要があり、コードで効果的に制御できないため、これは非常にイライラします。 Laravel のコマンド スケジューラーを使用すると、Laravel でタスク スケジュールをスムーズに定義できます。これには、サーバーにスケジュールされたタスク エントリを個別に追加するだけで、コードの量でタスク スケジュールを制御できます。

タスクのスケジュールは、app/Console/Kernel.php ファイルのスケジュール メソッドで定義されます。始める前に、簡単な例を見てみましょう。実行したいタスク スケジュールをスケジュール オブジェクトに追加できます。

プランの実行を開始します

サーバーの Cron 項目に次のエントリを追加するだけです:

* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1
ログイン後にコピー

Cron は、Laravel のコマンド スケジュールを 1 分ごとに呼び出して、スケジュールされたタスクを実行します。 Laravel はタスクスケジュールを自動的に評価し、期限になったらタスクを実行します。

タスクを定義する

AppConsoleKernel クラスのスケジュール メソッドですべてのタスク プランを定義できます。始める前に、タスク計画の簡単な例を見てみましょう。この例では、毎日午前 0 時にクロージャを実行します。 Closure では、クエリ ステートメントを実行してデータベース テーブルをクリアします。

<?phpnamespace App\Console;use DB;use Illuminate\Console\Scheduling\Schedule;use Illuminate\Foundation\Console\Kernel as ConsoleKernel;class Kernel extends ConsoleKernel{  /**   * The Artisan commands provided by your application.   *   * @var array   */   protected $commands = [     \App\Console\Commands\Inspire::class,   ];   /**    * Define the application's command schedule.    *    * @param \Illuminate\Console\Scheduling\Schedule $schedule    * @return void    */    protected function schedule(Schedule $schedule)    {      $schedule->call(function () {        DB::table('recent_users')->delete();      })->daily();    }}
ログイン後にコピー

Closure 呼び出しのスケジュールに加えて、Artisan コマンドとオペレーティング システム コマンドをスケジュールすることもできます。たとえば、コマンド メソッドを使用してアーティザン コマンドをスケジュールできます:

$schedule->command('emails:send --force')->daily();
ログイン後にコピー

exec メソッドを使用してオペレーティング システムにコマンドを発行できます:

$schedule->exec('node /home/forge/script.js')->daily();
ログイン後にコピー

スケジュール頻度オプション

もちろん、実行できるさまざまなタスクがあります。割り当てられるスケジュール方法:

MethodDescription->cron('* * * * * *');カスタマイズされた Cron タスク プランを実行する->everyMinute () ; 1分ごとにタスクを実行する->everyFiveMinutes();5分ごとにタスクを実行する->everyTenMinutes();10分ごとにタスクを実行する - >hourly();1時間ごとにタスクを実行します->daily();深夜に1回タスクを実行します->dailyAt('13:00');毎日13:00にタスクを実行します->twiceDaily(1, 13);毎日1:00と13:00にタスクを実行します->weekly(); 週に一度タスクを実行します->montyly();月に一度タスクを実行します->monthlyOn(4, '15:00');4日および毎月 15 日: 00 はタスクを実行します & & & gt; 四半期ごと (); /New_York'); タイムゾーンを設定する rrree 追加のスケジュール制約を以下に示します: Description 通常 (土曜日、日曜日を除く) に制限
これらのメソッドを追加の制約と組み合わせて、より細かく調整されたスケジュールを作成できます。特定の曜日のみ実行するなど。毎週月曜日に実行するようにスケジュール コマンドをスケジュールしましょう:
Method
->weekdays();

& & & gt; 日曜日 () ) >金曜日( );

金曜日限定

->土曜日();-> ) ;真実のテストに基づいて制限されています
土曜日限定

真值约束

when 方法可以基于给定的真值测试的结果来约束一个任务的执行。换种说法就是,如果给定的 Closure 返回 true,那么只要其他约束并不阻止任务的执行时,该任务就会被执行:

$schedule->command('emails:send')->daily()->when(function () {  return true;});
ログイン後にコピー

skip 方法刚好与 when 相反。如果 skip 方法返回 true,那么调度任务将不会执行:

$schedule->command('emails:send')->daily()->skip(function () {  return true; });
ログイン後にコピー

当链式调用 when 方法时,只有在所有的 when 约束返回 true 时才会执行调度任务命令。

避免任务重叠

默认的,如果前一个任务还在进程中,计划任务还是会再次运行的。你可以使用 withoutOverlapping 方法来避免这个:

$schedule->command('emails:send')->withoutOverlapping();
ログイン後にコピー

在这个例子中,emails:send Artisan 命令每分钟都会被调度,但是只有在进程中没有运行该命令时才会再次执行。withoutOverlapping 方法对于无法确定执行时间的任务特别有效,这样就可以避免同时执行越来越多的耗时任务增大服务器的压力。

任务输出

Laravel 的任务计划提供了多种方便的方法来生成计划任务的输出。首先,你需要使用 sendOutputTo 方法,你可以传递一个文件路径到方法以便之后的检查:

$schedule->command('emails:send')         ->daily()         ->sendOutputTo($filePath);
ログイン後にコピー

如果希望追加内容到给定的文件,你应该使用 appendOutputTo 方法:

$schedule->command('emails:send')         ->daily()         ->appendOutputTo($filePath);
ログイン後にコピー

你可以使用 emailOutputTo 方法来将输出发送到你选定的邮箱地址中。但是你需要注意的是,你必须先使用 sendOutputTo 方法将输出发送到文件中。并且,在通过邮件发送任务的输出之前,你需要先配置好 laravel 的邮件服务:

$schedule->command('foo')         ->daily()         ->sendOutputTo($filePath)         ->emailOutputTo('foo@example.com')
ログイン後にコピー

注意:emailOutputTo 和 sendOutputTo 方法只能在 command 方法中执行,并不支持 call 方法的调用。

任务钩子

你可以使用 before 和 after 方法来在任务计划执行或者完成时执行特定的操作:

$schedule->command('emails:send')         ->daily()         ->before(function () {           // Task is about to start...         })         ->after(function () {           // Task is complete...         });
ログイン後にコピー

Pingings URLs

使用 pingBefore 和 thenPing 方法,任务调度可以自动的在任务完成之前或者之后 ping 给定的 URL。这些方法通常用来通知外部的服务。比如 Laravel Envoyer,告知其计划任务将要执行或者已经完成:

$schedule->command('emails:send')         ->daily()         ->pingBefore($url)         ->thenPing($url);
ログイン後にコピー

使用 pingBefore($url) 或者 thenPing($url) 方法都需要引入 Guzzle HTTP 类库。你可以通过 Composer 来进行安装:

"guzzlehttp/guzzle": "~5.3|~6.0"
ログイン後にコピー

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 JSON Web Tokens(JWT)とPHP APIでのユースケースを説明してください。 Apr 05, 2025 am 12:04 AM

JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

フレームワークセキュリティ機能:脆弱性から保護します。 フレームワークセキュリティ機能:脆弱性から保護します。 Mar 28, 2025 pm 05:11 PM

記事では、入力検証、認証、定期的な更新など、脆弱性から保護するためのフレームワークの重要なセキュリティ機能について説明します。

確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 確固たる原則と、それらがPHP開発にどのように適用されるかを説明してください。 Apr 03, 2025 am 12:04 AM

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 フレームワークのカスタマイズ/拡張:カスタム機能を追加する方法。 Mar 28, 2025 pm 05:12 PM

この記事では、フレームワークにカスタム機能を追加し、アーキテクチャの理解、拡張ポイントの識別、統合とデバッグのベストプラクティスに焦点を当てています。

PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? PHPのCurlライブラリを使用してJSONデータを含むPOSTリクエストを送信する方法は? Apr 01, 2025 pm 03:12 PM

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。

システムの再起動後にUnixSocketの権限を自動的に設定する方法は? システムの再起動後にUnixSocketの権限を自動的に設定する方法は? Mar 31, 2025 pm 11:54 PM

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

See all articles