补齐翻译缺失
修改理由:
相关信息:
- 类型:文档文章
- 文章: 任务调度
- 文档: 《Laravel 11 中文文档(11.x)》
此投稿由 Trace92 在 1年前 合并。
标题修改:
内容修改:
| Old | New | Differences |
|---|---|---|
| 1 | ||
| 2 | 1 | # 任务调度 |
| 3 | 2 | |
| 4 | 3 | - [简介](#introduction) | … | … |
| 40 | 39 | DB::table('recent_users')->delete(); |
| 41 | 40 | })->daily(); |
| 42 | 41 | |
| 43 | ||
| 44 | ||
| 42 | ||
| 43 | ||
| 45 | 44 | 除了使用闭包调度外,还可以调度 [invokable 对象](https://secure.php.net/manual/en/language.oop5.magic.php#object.invoke)。invokable 对象指的是包含 `__invoke` 方法的简单 PHP 类: |
| 46 | 45 | |
| 47 | 46 | Schedule::call(new DeleteRecentUsers)->daily(); | … | … |
| 83 | 82 | DB::table('recent_users')->delete(); |
| 84 | 83 | })->purpose('Delete recent users')->daily(); |
| 85 | 84 | |
| 86 | ||
| 87 | ||
| 85 | ||
| 86 | ||
| 88 | 87 | 如果你需要向闭包命令传递参数,可以将它们提提供给 `schedule` 方法: |
| 89 | 88 | |
| 90 | 89 | Artisan::command('emails:send {user} {--force}', function ($user) { | … | … |
| 164 | 163 | `->yearlyOn(6, 1, '17:00');` | 每年 6 月 1 日 17:00 运行一次任务 |
| 165 | 164 | `->timezone('America/New_York');` | 设置任务时区 |
| 166 | 165 | |
| 167 | ||
| 168 | ||
| 166 | ||
| 167 | ||
| 169 | 168 | 这些方法可以与其他约束结合使用,创建更加精细的调度,只在一周的某些特定日子运行。例如,你可以调度命令在每周一运行一次: |
| 170 | 169 | |
| 171 | 170 | use Illuminate\Support\Facades\Schedule; | … | … |
| 212 | 211 | ->hourly() |
| 213 | 212 | ->days([0, 3]); |
| 214 | 213 | |
| 215 | ||
| 216 | ||
| 214 | ||
| 215 | ||
| 217 | 216 | 不仅如此,你还可以使用 `Illuminate\Console\Scheduling\Schedule` 类中的常量来设置任务在指定日期运行: |
| 218 | 217 | |
| 219 | 218 | use Illuminate\Support\Facades; | … | … |
| 264 | 263 | ->daily() |
| 265 | 264 | ->environments(['staging', 'production']); |
| 266 | 265 | |
| 267 | ||
| 268 | ||
| 266 | ||
| 267 | ||
| 269 | 268 | <a name="timezones"></a> |
| 270 | 269 | ### 时区 |
| 271 | 270 | … | … |
| 301 | 300 | |
| 302 | 301 | Schedule::command('emails:send')->withoutOverlapping(10); |
| 303 | 302 | |
| 304 | ||
| 305 | ||
| 303 | ||
| 304 | ||
| 306 | 305 | 在幕后,withoutOverlapping 方法使用应用程序的 [cache](/docs/laravel/11.x/cache) 来获取锁。如果必要,你可以使用 `schedule:clear-cache` Artisan 命令清除这些缓存锁。通常只有在服务器出现意外问题导致任务卡住时才需要这样做。 |
| 307 | 306 | |
| 308 | 307 | <a name="running-tasks-on-one-server"></a> | … | … |
| 339 | 338 | ->onOneServer(); |
| 340 | 339 | ``` |
| 341 | 340 | |
| 342 | ||
| 343 | ||
| 341 | ||
| 342 | ||
| 344 | 343 | 同样,如果打算在一台服务器上运行计划闭包,则必须为其分配一个名称: |
| 345 | 344 | |
| 346 | 345 | ```php | … | … |
| 377 | 376 | |
| 378 | 377 | 现在,我们已经学会了如何定义计划任务,接下来让我们讨论如何真正在服务器上运行它们。`schedule:run` Artisan 命令将评估你的所有计划任务,并根据服务器的当前时间决定它们是否运行。 |
| 379 | 378 | |
| 380 | ||
| 381 | ||
| 379 | ||
| 380 | ||
| 382 | 381 | 因此,当使用 Laravel 的调度器时,我们只需要在服务器上添加一个单一的 cron 配置项,每分钟运行一次 `schedule:run` 命令。如果你不知道如何向服务器添加 cron 条目,请考虑使用诸如 [Laravel Forge](https://forge.laravel.com) 之类的服务来为你管理 cron 配置项: |
| 383 | 382 | |
| 384 | 383 | ```shell | … | … |
| 411 | 410 | |
| 412 | 411 | 由于在定义了小于一分钟的任务时,`schedule:run` 命令会在调用的整分钟内运行,因此有时可能需要在部署应用程序时中断该命令。否则,已在运行的 `schedule:run` 命令实例将继续使用你的应用程序先前部署的代码,直到当前分钟结束。 |
| 413 | 412 | |
| 414 | ||
| 415 | ||
| 413 | ||
| 414 | ||
| 416 | 415 | 为了中断正在进行的 `schedule:run` 调用,你可添加 `schedule:interrupt` 命令到应用程序的部署脚本中。该命令应在你的应用程序部署完成后调用: |
| 417 | 416 | |
| 418 | 417 | ```shell | … | … |
| 461 | 460 | > [!WARNING] |
| 462 | 461 | > `emailOutputTo` , `emailOutputOnFailure` , `sendOutputTo` 和 `appendOutputTo` 方法是 `command` 和 `exec` 方法所独有的。 |
| 463 | 462 | |
| 464 | ||
| 465 | ||
| 463 | ||
| 464 | ||
| 466 | 465 | <a name="task-hooks"></a> |
| 467 | 466 | ## 任务钩子 |
| 468 | 467 | … | … |
| 520 | 519 | ->pingBeforeIf($condition, $url) |
| 521 | 520 | ->thenPingIf($condition, $url); |
| 522 | 521 | |
| 523 | ||
| 524 | ||
| 522 | ||
| 523 | ||
| 525 | 524 | `pingOnSuccess` 和 `pingOnFailure` 方法可用于仅在任务成功或失败时 ping 给定的网址。失败表示预定的 Artisan 或系统命令以非零退出代码终止: |
| 526 | 525 | |
| 527 | 526 | Schedule::command('emails:send') | … | … |
| 530 | 529 | ->pingOnFailure($failureUrl); |
| 531 | 530 | |
| 532 | 531 | <a name="events"></a> |
| 533 | ## | |
| 532 | ## 事件 | |
| 534 | 533 | |
| 535 | 534 | Laravel 在调度过程中发送各种[事件](/docs/laravel/11.x/events)。你可以为以下事件[定义监听器](/docs/laravel/11.x/events): |
| 536 | 535 | … | … |
| 541 | 540 | `Illuminate\Console\Events\ScheduledBackgroundTaskFinished` | |
| 542 | 541 | `Illuminate\Console\Events\ScheduledTaskSkipped` | |
| 543 | 542 | `Illuminate\Console\Events\ScheduledTaskFailed` | |
| 543 | ||
| 544 | 544 | |
| 545 |
关于 LearnKu