跳至内容

基本用法

任务通过 app/Config/Tasks.php 配置文件中的 init() 方法进行配置。我们从一个简单的示例开始

<?php

namespace Config;

use CodeIgniter\Tasks\Config\Tasks as BaseTasks;
use CodeIgniter\Tasks\Scheduler;

class Tasks extends BaseTasks
{
    /**
     * Register any tasks within this method for the application.
     *
     * @param Scheduler $schedule
     */
    public function init(Scheduler $schedule)
    {
        $schedule->call(function() {
            DemoContent::refresh();
        })->mondays();
    }
}

在此示例中,我们使用闭包在每个星期一的凌晨 12:00 刷新演示内容。闭包是处理此类快速函数的简单方法。您还可以执行服务器命令、执行您编写的自定义 CLI 命令、调用 URL,甚至触发您选择的事件。详细信息如下。

计划

这是我们计划任务的方式。我们有很多选择。

计划 CLI 命令

如果您编写了自己的 CLI 命令,则可以使用 command() 方法计划运行它们。

$schedule->command('demo:refresh --all');

唯一的参数是一个调用命令的字符串,并带有选项或参数。

计划 Shell 命令

您可以使用 shell() 方法调用服务器并执行命令。

$schedule->shell('cp foo bar')->daily()->at('11:00 pm');

只需提供要调用的命令和任何参数,它将使用 PHP 的 exec() 方法执行。

注意

出于安全原因,许多共享服务器会关闭 exec 访问。如果您将在共享服务器上运行,请在使用此功能之前仔细检查您是否可以使用 exec 命令。

计划事件

如果您想触发 事件,可以使用 event() 方法为您执行此操作,并传入要触发的事件的名称。

$schedule->event('Foo')->hourly();

计划 URL 调用

如果您需要定期 ping 一个 URL,可以使用 url() 方法使用 cURL 对您传入的 URL 执行一个简单的 GET 请求。如果您需要比简单的 URL 字符串中提供的更强的动态性,可以使用闭包或命令。

$schedule->url('https://my-status-cloud.com?site=foo.com')->everyFiveMinutes();

频率选项

有多种方法可用于指定任务的调用频率。

方法 说明
->cron('* * * * *') 按自定义 cron 计划运行。
->daily('4:00 am') 每天凌晨 12:00 运行,除非传入时间字符串。
->hourly() / ->hourly(15) 每小时的开头或指定分钟运行。
->everyHour(3, 15) 每 3 小时在 XX:15 运行。
->betweenHours(6,12) 在 6 点到 12 点之间运行。
->hours([0,10,16]) 在 0、10 和 16 点运行。
->everyMinute(20) 每 20 分钟运行。
->betweenMinutes(0,30) 在 0 到 30 分钟之间运行。
->minutes([0,20,40]) 在特定分钟 0、20 和 40 运行。
->everyFiveMinutes() 每 5 分钟运行(12:00、12:05、12:10 等)
->everyFifteenMinutes() 每 15 分钟运行(12:00、12:15 等)
->everyThirtyMinutes() 每 30 分钟运行(12:00、12:30 等)
->days([0,3]) 仅在星期日和星期三运行(0 是星期日,6 是星期六)
->sundays('3:15am') 除非传入时间,否则每周日午夜运行。
->mondays('3:15am') 除非传入时间,否则每周一午夜运行。
->tuesdays('3:15am') 除非传入时间,否则每周二午夜运行。
->wednesdays('3:15am') 除非传入时间,否则每周三午夜运行。
->thursdays('3:15am') 除非传入时间,否则每周四午夜运行。
->fridays('3:15am') 除非传入时间,否则每周五午夜运行。
->saturdays('3:15am') 除非传入时间,否则每周六午夜运行。
->monthly('12:21pm') 除非传入时间,否则每月第一天凌晨 12:00 运行。
->daysOfMonth([1,15]) 仅在 1 日和 15 日运行。
->everyMonth(4) 每 4 个月运行一次。
->betweenMonths(4,7) 在 4 月到 7 月之间运行。
->months([1,7]) 仅在 1 月和 7 月运行。
->quarterly('5:00am') 在每个季度的第一天运行(1 月 1 日、4 月 1 日、7 月 1 日、10 月 1 日)
->yearly('12:34am') 在每年的第一天运行。
->weekdays('1:23pm') 在周一至周五上午 12:00 运行,除非传入时间。
->weekends('2:34am') 在周六和周日上午 12:00 运行,除非传入时间。
->environments('local', 'prod') 限制任务仅在指定的环境中运行

这些方法可以组合使用,以创建更加细致的时间安排

$schedule->command('foo')
    ->weekdays()
    ->hourly()
    ->environments('development');

这将在周一至周五的每小时顶部运行任务,但仅在开发环境中运行。

命名任务

你可以给任务命名,以便稍后可以轻松引用它们,例如通过使用 named() 方法通过 CLI。

$schedule->command('foo')->nightly()->named('foo-task');