定时任务,适用于例如“每天的0点”或“每年3,6,9月份的第二个周日”执行的任务,如果是每隔一分钟执行一次的任务,则不适用于这类任务.
根据配置定时调用某个服务,服务调用与普通的服务区别:
- 无动态参数,如果需要配置某些固定参数,请在mm.json中的data中配置
- 无返回值
正常情况下,服务不可部署多个实例,但若定时任务的系统资源消耗量过大,可以部署多个,但需要修改定时任务的策略,让多个定时任务的服务的工作合并时达到预期值即可。比如定时任务需要执行a,b,c三个任务,而a任务的工作量过大,可以将a单独配置部署,即配置文件mm.json
的jobs
中只包含a的任务,b和c合并部署一台服务器。再比如a的定时任务实在太大,同一台服务器资源受限无法完成,可以将a再次拆解,假如a任务每隔10分钟执行一次,可以分解为两个服务实例,单个服务器的执行任务策略修改为20分钟一次。
在正式环境部署时,最好使用docker进行,且设定其在导致异常时重启容器。
yarn dev-schedule
yarn build
yarn build
{
"jobs": [
{
"service": "s001",
"description": "example for schedule",
"rule": "* * * * * *",
"start": "",
"end": "",
"data": {
"test": "feidao"
}
}
]
}
服务文件名,为项目下 src/schedule下相对文件名。
定时任务说明
* * * * * *
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ │
│ │ │ │ │ └ 一周中的第几天 (0 - 7) (0 或 7 为周日)
│ │ │ │ └───── 月 (1 - 12)
│ │ │ └────────── 一个月的第几天 (1 - 31)
│ │ └─────────────── 小时 (0 - 23)
│ └──────────────────── 分钟 (0 - 59)
└───────────────────────── 秒 (0 - 59, 非必填)
说明:
*
表示全部?
不详,试验结果在第4项(一个月的第几天)和第6项(一周中的第几天)中与*
等效m-n
表示从m
到n
期间都执行*/n
表示每隔n
个时间单位执行一次m,n
表示m
和n
都执行#m
表示第二个,如* * * * * 0#m
表示每个月的第二个周日
时间戳或时间字符串,如
1610440541000
"1/12/2021, 4:35:41 PM"
"1/12/2021, 16:35:41"
"1/12/2021"
"Tue Jan 12 2021"
"Tue Jan 12 2021 16:35:41 GMT+0800 (China Standard Time)"
"Tue Jan 12 2021 16:35:41 GMT+0800"
1610440541000
"1/12/2021, 4:35:41 PM"
"1/12/2021, 16:35:41"
"1/12/2021"
"Tue Jan 12 2021"
"Tue Jan 12 2021 16:35:41 GMT+0800 (China Standard Time)"
"Tue Jan 12 2021 16:35:41 GMT+0800"
附加固定参数,比如第三方服务如微信服务的appid之类的。
日志配置,具体请参考官方说明:log4js