trigger.md 4.8 KB
Newer Older
Q
qiang 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
如果云函数需要定时/定期执行,即定时触发,您可以使用云函数定时触发器。已配置定时触发器的云函数,会在相应时间点被自动触发,函数的返回结果不会返回给调用方。

在uniCloud web控制台点击需要添加触发器的云函数详情,创建云函数触发器,格式如下:

**腾讯云**

```js
// 参数是触发器数组,目前仅支持一个触发器,即数组只能填写一个,不可添加多个
// 实际添加时请务必去除注释
[
  {
    // name: 触发器的名字,规则见下方说明
    "name": "myTrigger",
    // type: 触发器类型,目前仅支持 timer (即定时触发器)
    "type": "timer",
    // config: 触发器配置,在定时触发器下,config 格式为 cron 表达式,规则见下方说明
    "config": "0 0 2 1 * * *"
  }
]
```

**阿里云**

```js
["cron:0 0 * * * *"]
```

**注意**

- 当前阿里云没有服务空间用量计费,为避免资源浪费,定时触发器限制为最高频率每小时触发一次,要求cron表达式中的秒和分仅支持配置固定的数字,不支持特殊字符。(如需提高调用频率可以发送邮件到service@dcloud.io进行申请)
- 阿里云的cron表达式为6位,腾讯云为7位。相比腾讯云,阿里云缺少代表年份的第7位
- 定时触发使用的是utc+8的时间
- 除了在web控制台配置外,还可以在云函数package.json内添加定时触发相关的配置[云函数 package.json](uniCloud/cf-functions.md?id=packagejson)

使用定时触发可以执行一些跑批任务,目前阿里云可以在使用定时触发时将云函数最高超时时间设置为600秒(非定时触发时不支持60秒以上超时时间),腾讯云目前最大超时时间为60秒。

### 字段规则
- 定时触发器名称(name) :最大支持60个字符,支持 `a-z`, `A-Z`, `0-9`, `-``_`。必须以字母开头,且一个函数下不支持同名的多个定时触发器。
- 定时触发器触发周期 (config):指定的函数触发时间。填写自定义标准的 Cron 表达式来决定何时触发函数。有关 Cron 表达式的更多信息,请参考以下内容。

### Cron 表达式
Cron 表达式有七个字段,按空格分隔。其中,每个字段都有相应的取值范围:

|排序| 字段 | 值 | 通配符 |
|--| -- | -- | -- |
|第一位| 秒 | 0 - 59的整数 | , - * / |
|第二位| 分钟 | 0 - 59的整数 | , - * / |
|第三位| 小时 | 0 - 23的整数 | , - * / |
|第四位| 日 | 1 - 31的整数(需要考虑月的天数) | , - * / |
|第五位| 月 | 1 - 12的整数或 JAN、FEB、MAR、APR、MAY、JUN、JUL、AUG、SEP、OCT、NOV和DEC | , - * / |
|第六位| 星期 | 0 - 6的整数或 MON、TUE、WED、THU、FRI、SAT和SUN,其中0指星期一,1指星期二,以此类推 | , - * / |
|第七位| 年 | 1970 - 2099的整数(阿里云不支持第七位) | , - * / |

### 通配符

| 通配符 | 含义 |
| -- | -- |
| ,(逗号) | 代表取用逗号隔开的字符的并集。例如:在“小时”字段中 1,2,3 表示1点、2点和3点 |
| - (短横线)| 包含指定范围的所有值。例如:在“日”字段中,1 - 15包含指定月份的1号到15号 |
| * (星号) | 表示所有值。在“小时”字段中,* 表示每个小时 |
| / (正斜杠) | 指定增量。在“分钟”字段中,输入1/10以指定从第一分钟开始的每隔十分钟重复。例如,第11分钟、第21分钟和第31分钟,以此类推 |


- 腾讯云:在 Cron 表达式中的“日”和“星期”字段同时指定值时,两者为“或”关系,即两者的条件均生效。
- 阿里云:在 Cron 表达式中的“日”和“星期”字段同时指定值时会报错。

### 示例

下面列举一些 Cron 表达式和相关含义:

```
// 需要注意的是阿里云不支持第七位,请自行去除代表年的位置
*/5 * * * * * * 表示每5秒触发一次
0 0 2 1 * * * 表示在每月的1日的凌晨2点触发
0 15 10 * * MON-FRI * 表示在周一到周五每天上午10:15触发
0 0 10,14,16 * * * * 表示在每天上午10点,下午2点,下午4点触发
0 */30 9-17 * * * * 表示在每天上午9点到下午5点内每半小时触发
0 0 12 * * WED * 表示在每个星期三中午12点触发
```

### 云函数入参说明

使用定时触发器调用云函数时云函数会收到特定的参数。两个平台的参数如下:

**腾讯云**

```js
{	
	"Time":"2020-04-08T10:22:31Z", //调用的云函数的时间
	"TriggerName":"myTrigger", //触发器名
	"Type":"Timer" //触发器类型,目前只有Timer
}
```

**阿里云**

```js
{
  "timingTriggerConfig": "cron:0 0 * * * *", //触发云函数的定时器配置内容
  "timestamp": 1585670400006 //触发云函数时的时间戳,可能略晚于cron表达式时间
}
```