基本用法
任务通过 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');