タスクのスケジュールは、app/Console/Kernel.php ファイルのスケジュール メソッドで定義されます。始める前に、簡単な例を見てみましょう。実行したいタスク スケジュールをスケジュール オブジェクトに追加できます。
プランの実行を開始します
* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1
タスクを定義する
<?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(); }}
$schedule->command('emails:send --force')->daily();
$schedule->exec('node /home/forge/script.js')->daily();
Description | |
---|---|
カスタマイズされた Cron タスク プランを実行する | |
1分ごとにタスクを実行する | |
5分ごとにタスクを実行する | |
10分ごとにタスクを実行する | |
1時間ごとにタスクを実行します | |
深夜に1回タスクを実行します | |
毎日13:00にタスクを実行します | |
毎日1:00と13:00にタスクを実行します | |
週に一度タスクを実行します | |
月に一度タスクを実行します | |
4日および毎月 15 日: 00 はタスクを実行します | & & & gt; 四半期ごと (); /New_York'); |
これらのメソッドを追加の制約と組み合わせて、より細かく調整されたスケジュールを作成できます。特定の曜日のみ実行するなど。毎週月曜日に実行するようにスケジュール コマンドをスケジュールしましょう: | rrree|
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') ログイン後にコピー
任务钩子你可以使用 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" ログイン後にコピー
関連ラベル:
ソース:php.cn
前の記事:HTML フレームを使用しない場合、TP は複数の HTML ページを 1 つのページに結合できますか?
次の記事:Symfony Asset コンポーネントを使用して CSS Javascript と画像ファイルを管理する
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
最新の問題
function_exists() はカスタム関数を決定できません
Function test () {return true;} if (function_exists ('test')) {echo "テストは関数です";
から 2024-04-29 11:01:01
0
2
1870
Google Chromeのモバイル版を表示する方法
こんにちは、先生、Google Chrome をモバイル版に変更するにはどうすればよいですか?
から 2024-04-23 00:22:19
0
10
2033
親ウィンドウには出力がありません
document.onclick = function(){ window.opener.document.write('私は子ウィンドウの出力です');
から 2024-04-18 23:52:34
0
1
1614
関連トピック
詳細>
|