@mmstudio/schedule
Version:
Node.js schedule service.
137 lines (99 loc) • 3.84 kB
Markdown
# 1. Node.js Service
<!-- TOC -->
- [1. Description](#1-description)
- [2. 服务](#2-服务)
- [3. 注意](#3-注意)
- [4. 开发](#4-开发)
- [5. 编译](#5-编译)
- [6. 运行](#6-运行)
- [7. Config](#7-config)
- [7.1. mm.json](#71-mmjson)
- [7.1.1. service](#711-service)
- [7.1.2. description](#712-description)
- [7.1.3. rule](#713-rule)
- [7.1.4. start](#714-start)
- [7.1.5. end](#715-end)
- [7.1.6. data](#716-data)
- [7.2. log4js.json](#72-log4jsjson)
<!-- /TOC -->
## 1. Description
定时任务,适用于例如“每天的0点”或“每年3,6,9月份的第二个周日”执行的任务,如果是每隔一分钟执行一次的任务,则不适用于这类任务.
## 2. 服务
根据配置定时调用某个服务,服务调用与普通的服务区别:
1. 无动态参数,如果需要配置某些固定参数,请在mm.json中的data中配置
1. 无返回值
## 3. 注意
正常情况下,服务不可部署多个实例,但若定时任务的系统资源消耗量过大,可以部署多个,但需要修改定时任务的策略,让多个定时任务的服务的工作合并时达到预期值即可。比如定时任务需要执行a,b,c三个任务,而a任务的工作量过大,可以将a单独配置部署,即配置文件`mm.json`的`jobs`中只包含a的任务,b和c合并部署一台服务器。再比如a的定时任务实在太大,同一台服务器资源受限无法完成,可以将a再次拆解,假如a任务每隔10分钟执行一次,可以分解为两个服务实例,单个服务器的执行任务策略修改为20分钟一次。
在正式环境部署时,最好使用docker进行,且设定其在导致异常时重启容器。
## 4. 开发
`yarn dev-schedule`
## 5. 编译
`yarn build`
## 6. 运行
`yarn build`
## 7. Config
### 7.1. mm.json
``` json
{
"jobs": [
{
"service": "s001",
"description": "example for schedule",
"rule": "* * * * * *",
"start": "",
"end": "",
"data": {
"test": "feidao"
}
}
]
}
```
#### 7.1.1. service
服务文件名,为项目下 src/schedule下相对文件名。
#### 7.1.2. description
定时任务说明
#### 7.1.3. rule
```txt
* * * * * *
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ │
│ │ │ │ │ └ 一周中的第几天 (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`表示每个月的第二个周日
#### 7.1.4. start
时间戳或时间字符串,如
```ts
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"
```
#### 7.1.5. end
```ts
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"
```
#### 7.1.6. data
附加固定参数,比如第三方服务如微信服务的appid之类的。
### 7.2. log4js.json
日志配置,具体请参考官方说明:[log4js](https://github.com/nomiddlename/log4js-node)