# 定时任务
## 定时任务
> **注意**:有关如何设置调度程序任务的说明,请参阅[安装指南](https://octobercms.com/docs/setup/installation#crontab-setup)。
### 定义时间表
* 在`lugin注册类`中的`registerSchedule`方法来定义所有计划的任务。
* 参数`$schedule`,定义命令及其频率
* 示例,`Closure`每天调用一次。`Closure`将执行数据库查询以清除表:
~~~
class Plugin extends PluginBase
{
[...]
public function registerSchedule($schedule)
{
$schedule->call(function () {
\Db::table('recent_users')->delete();
})->daily();
}
}
~~~
使用`command`方法来调度控制台命令:
~~~
$schedule->command('cache:clear')->daily();
~~~
该`exec`命令可用于向操作系统发出命令:
~~~
$schedule->exec('node /home/acme/script.js')->daily();
~~~
### 安排频率选项
当然,您可以为任务分配各种时间表:
| 方法 | 描述 |
| --- | --- |
| `->cron('* * * * *');` | 按照自定义Cron时间表运行任务 |
| `->everyMinute();` | 每分钟运行一次任务 |
| `->everyFiveMinutes();` | 每五分钟运行一次任务 |
| `->everyTenMinutes();` | 每十分钟运行一次任务 |
| `->everyThirtyMinutes();` | 每三十分钟运行一次任务 |
| `->hourly();` | 每小时运行一次任务 |
| `->daily();` | 每天午夜运行任务 |
| `->dailyAt('13:00');` | 每天13:00运行任务 |
| `->twiceDaily(1, 13);` | 每天在1:00和13:00运行任务 |
| `->weekly();` | 每周运行任务 |
| `->monthly();` | 每月运行任务 |
这些方法可以与其他约束条件结合使用,以创建甚至只在一周的某些天运行的更精细的计划。例如,要安排一个命令在星期一每周运行:
~~~
$schedule->call(function () {
// 每周一13:00运行一次...
})->weekly()->mondays()->at('13:00');
~~~
以下是其他计划约束的列表:
| 方法 | 描述 |
| --- | --- |
| `->weekdays();` | 将任务限制为工作日 |
| `->sundays();` | 将任务限制为星期日 |
| `->mondays();` | 将任务限制为星期一 |
| `->tuesdays();` | 将任务限制为星期二 |
| `->wednesdays();` | 将任务限制为星期三 |
| `->thursdays();` | 将任务限制为星期四 |
| `->fridays();` | 将任务限制为星期五 |
| `->saturdays();` | 将任务限制为星期六 |
| `->when(Closure);` | 根据真相测试限制任务 |
#### 真相测试约束
* 该`when`方法可以用于基于给定真值测试的结果来限制任务的执行。
* 如果条件为真 则执行
~~~
$schedule->command('emails:send')->daily()->when(function () {
return true;
});
~~~
### [](https://octobercms.com/docs/plugin/scheduling#preventing-task-overlaps)防止任务重叠
默认情况下,即使任务的先前实例仍在运行,计划的任务也将运行。为防止这种情况,可以使用以下`withoutOverlapping`方法:
~~~
$schedule->command('emails:send')->withoutOverlapping();
~~~
在此示例中,如果`emails:send`[控制台命令](https://octobercms.com/docs/console/commands)尚未运行,则将每分钟运行一次。`withoutOverlapping`如果您的任务在执行时间上有很大不同,从而使您不必准确预测给定任务将花费多长时间,则该方法特别有用。
### [](https://octobercms.com/docs/plugin/scheduling#task-output)任务输出
计划程序提供了几种方便的方法来处理计划任务生成的输出。首先,使用该`sendOutputTo`方法,您可以将输出发送到文件中以供以后检查:
~~~
$schedule->command('emails:send')
->daily()
->sendOutputTo($filePath);
~~~
使用该`emailOutputTo`方法,您可以将输出通过电子邮件发送到您选择的电子邮件地址。请注意,必须首先使用`sendOutputTo`方法将输出发送到文件。同样,在通过电子邮件发送任务输出之前,您应该配置[邮件服务](https://octobercms.com/docs/services/mail):
~~~
$schedule->command('foo')
->daily()
->sendOutputTo($filePath)
->emailOutputTo('foo@example.com');
~~~
> **注:**该`emailOutputTo`和`sendOutputTo`方法是独家的`command`方法,并且不支持`call`。
### [](https://octobercms.com/docs/plugin/scheduling#task-hooks)任务挂钩
使用`before`和`after`方法,您可以指定计划任务完成之前和之后要执行的代码:
~~~
$schedule->command('emails:send')
->daily()
->before(function () {
// Task is about to start...
})
->after(function () {
// Task is complete...
});
~~~
#### ping URL
使用`pingBefore`和`thenPing`方法,计划程序可以在任务完成之前或之后自动ping给定URL。此方法对于通知外部服务您计划的任务即将开始或完成很有用:
~~~
$schedule->command('emails:send')
->daily()
->pingBefore($url)
->thenPing($url);
~~~
> 您需要先安装[驱动程序插件,](http://octobercms.com/plugin/october-drivers)然后才能使用`pingBefore($url)`或`thenPing($url)`功能。
- 基本说明
- 基本操作
- October cms 安装
- 后台控制器路径
- 图标
- 获取安装网上的插件/主题
- 插件构造器使用
- 定时任务
- October后台控制器
- vscode编辑器
- ajax操作
- 使用
- ajax更新组件
- ajax属性API
- JavaScript API
- ajax综合使用
- 主题
- 多语言主题
- 安装市场主题
- 主题程序处理
- 主题
- 页面
- 部件
- 布局
- 内容
- 组件
- 媒体
- 主题表单操作
- 表单使用
- 表单后端程序处理
- 插件
- 自定义插件
- 插件说明
- 插件导航条
- 插件数据库设置
- 插件的设置管理
- 插件的配置文件config
- 组件
- app服务
- app容器
- 扩展行为
- 缓存
- Collection类
- Lazy Collections
- Collection方法
- 助手函数
- 数组助手函数
- 路径助手函数
- 玄乐助手函数
- 其他助手函数
- 错误与记录
- 事件处理
- HTML页面
- 文件与目录操作
- 散列和加密
- 邮件
- 邮件内容
- 邮件发送
- 分页
- 模板解析器
- 动态解析器语法
- 队列消息
- 请求与输入
- 响应
- 视图
- 路由器
- 配置
- 验证操作
- 处理错误消息
- 错误消息与视图
- 可用的验证规则
- 有条件的验证规则
- 验证数组
- 错误消息
- 自定义验证规则
- 模型操作
- 定义模型与其属性
- 检索模型
- 插入与更新
- 删除模型
- 查询范围
- 事件操作
- 关联操作
- 定义关系
- 关系类型
- 多肽关系
- 关系查询
- 渴望加载
- 插入模型
- 数据库操作
- 基本用法
- 数据表结构
- 查询连贯操作
- 结果检索
- select子句
- 插入更新
- where子句
- 排序,分组,限制和偏移
- 文件附件
- Collection操作
- 属性操作
- 系列化json
- 数据库属性
- 数据库行为
- 控制器
- 后台控制器定义
- 后台页面
- 后台组件
- 后台表单
- 表单组件
- 表单视图
- 表单行为
- 后台列表
- 列表行为
- 列表过滤器
- 可用列类型
- 关系行为
- 关系行为类型
- 扩展关系行为
- 列表排序操作
- 导入导出操作
- 用于与权限
- corlate模板修改
- 修改顶部导航
- laravel问题
- 控制器不存在
- 控制器
- 路由组
- laravel笔记
- laravel 安装
- 伪静态配置
- 依赖注入 & 控制器
- 中间件
- 路由文件
- 视图