用户可以编写 SCF 函数来处理定时任务(支持秒级触发)。定时器会在指定时间自动触发 SCF 函数。定时触发器具有以下特点:
Push 模型:定时器指定时间到达时直接调用相关函数的 Invoke 接口来触发函数。该事件源映射关系保存在 SCF 函数中。
异步调用:定时器始终使用异步调用类型来调用函数,结果不会返回给调用方。有关调用类型的更多信息,请参阅 调用类型。
定时触发器属性
定时器名称(必选):最大支持60个字符,支持
a-z
,A-Z
,0-9
,-
和_
。必须以字母开头,且一个函数下不支持同名的多个定时触发器。触发周期(必选):指定的函数触发时间。用户可以使用控制台上的默认值,或选择自定义标准的 Cron 表达式来决定何时触发函数。有关 Cron 表达式的更多信息,请参考下面的内容。
入参(可选):最大支持4KB的字符串,可以在入口函数的 “event” 参数中获取。
Cron 表达式
定时触发器现已推出秒级触发功能,创建定时触发器时,用户能够使用标准的 Cron 表达式的形式自定义何时触发。
Cron 表达式语法
Cron 表达式有七个必需字段,按空格分隔。
第一位 | 第二位 | 第三位 | 第四位 | 第五位 | 第六位 | 第七位 |
秒 | 分钟 | 小时 | 日 | 月 | 星期 | 年 |
其中,每个字段都有相应的取值范围:
字段 | 值 | 通配符 | 特殊符号 |
秒 | 0 - 59的整数 | , - * / | 无 |
分钟 | 0 - 59的整数 | , - * / | 无 |
小时 | 0 - 23的整数 | , - * / | 无 |
日 | 1 - 31的整数(需要考虑月的天数) | , - * / | ? L W |
月 | 1 - 12的整数或 JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEP,OCT,NOV,DEC | , - * / | 无 |
星期 | 0 - 6的整数或 SUN,MON,TUE,WED,THU,FRI,SAT。其中0指星期日,1指星期一,以此类推。 | , - * / | ? L # |
年 | 1970 - 2099的整数 | , - * / | 无 |
通配符
通配符 | 含义 |
,(逗号) | 代表取用逗号隔开的字符的并集。例如:在“小时”字段中 1,2,3 表示1点、2点和3点。 |
-(破折号) | 包含指定范围的所有值。例如:在“日”字段中,1 - 15包含指定月份的1号到15号。 |
*(星号) | 表示所有值。在“小时”字段中,* 表示每个小时。 |
/(正斜杠) | 指定增量。在“分钟”字段中,输入1/10以指定从第一分钟开始的每隔十分钟重复。例如,第11分钟、第21分钟和第31分钟,以此类推。 |
特殊符号
特殊符号 | 含义 |
? | 只可使用在“日”字段、“星期”字段,表示不指定具体某日或星期几。例如:“日”字段指定为2,“星期”字段为“?”时,表示只判断日期为2日,而不指定2日为星期几。 |
L | 只可使用在“日”字段、“星期”字段,表示“最后”。 在“日”字段,表示月份的最后一天;在“星期”字段,表示最后一个星期几,限定范围为0-6的整数,例如:5L 表示最后一个星期五。 |
W | 只可使用在“日”字段,表示距离某日最接近的工作日(星期一到星期五)。例如:10W 表示离10日最接近的工作日,配合“月”字段,可表示 某月中最接近某日的工作日;“日”字段中,“L”与“W”组合为“LW”使用时表示月份的最后一个工作日。 |
# | 只可使用在“星期”字段,且“#”前后必须给定数字,表示第几个星期几。“#”前的数字表示星期几,范围为0-6的整数;“#”后的数字表示第几个,范围为1-5的整数。例如:2#3 表示第三个星期二。 |
注意事项
1. 在 Cron 表达式中的“日”和“星期”字段同时指定具体值时,两者为“或”关系,即两者的条件分别均生效。
2. 使用“W”符号时,指定某日与其最近的工作日为同一月,不会跨月。如指定“1W”,即距离1日最接近的工作日,当1日为周六时,与1日最接近的工作日为本月3日(周一),而不是上月最后一日(周五)。
示例
下面展示了一些 Cron 表达式和相关含义的示例:
表达式 | 相关含义 |
*/5 * * * * * * | 表示每5秒触发一次 |
0 15 10 1 * ? * | 表示在每月的1日的上午10:15触发 |
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点触发 |
0 0 0 L * * * | 表示在每月的最后一天的零时触发 |
0 0 0 * 5 4L * | 表示在5月的最后一个周四的零时触发 |
0 0 0 12W 6 * * | 表示在6月中最接近12日的工作日的零时触发 |
0 0 0 ? * 2#3 * | 表示在每月的第三个星期二的零时触发 |
0 0 0 LW * ? * | 表示在每月的最后一个工作日的零时触发 |
定时触发器入参说明
定时触发器在触发函数时,会把如下的数据结构封装在 event 里传给云函数。同时,定时触发器支持自定义传入 Message,缺省为空。
{"Type":"Timer","TriggerName":"EveryDay","Time":"2019-02-21T11:49:00Z","Message":"user define msg body"}
字段 | 含义 |
Type | 触发器的类型,值为 Timer。 |
TriggerName | 定时触发器的名称。最大支持60个字符,支持 a-z ,A-Z ,0-9 ,- 和_ 。必须以字母开头,且一个函数下不支持同名的多个定时触发器。 |
Time | 触发器创建时间,0时区。 |
Message | 字符串类型。 |