@mmstudio/schedule

Node.js schedule service.

Usage no npm install needed!

<script type="module">
  import mmstudioSchedule from 'https://cdn.skypack.dev/@mmstudio/schedule';
</script>

README

1. Node.js Service

1. Description

定时任务,适用于例如“每天的0点”或“每年3,6,9月份的第二个周日”执行的任务,如果是每隔一分钟执行一次的任务,则不适用于这类任务.

2. 服务

根据配置定时调用某个服务,服务调用与普通的服务区别:

  1. 无动态参数,如果需要配置某些固定参数,请在mm.json中的data中配置
  2. 无返回值

3. 注意

正常情况下,服务不可部署多个实例,但若定时任务的系统资源消耗量过大,可以部署多个,但需要修改定时任务的策略,让多个定时任务的服务的工作合并时达到预期值即可。比如定时任务需要执行a,b,c三个任务,而a任务的工作量过大,可以将a单独配置部署,即配置文件mm.jsonjobs中只包含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

{
    "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

*    *    *    *    *    *
┬    ┬    ┬    ┬    ┬    ┬
│    │    │    │    │    │
│    │    │    │    │    └ 一周中的第几天 (0 - 7) (0 或 7 为周日)
│    │    │    │    └───── 月 (1 - 12)
│    │    │    └────────── 一个月的第几天 (1 - 31)
│    │    └─────────────── 小时 (0 - 23)
│    └──────────────────── 分钟 (0 - 59)
└───────────────────────── 秒 (0 - 59, 非必填)

说明:

  • * 表示全部
  • ? 不详,试验结果在第4项(一个月的第几天)和第6项(一周中的第几天)中与*等效
  • m-n 表示从mn期间都执行
  • */n 表示每隔n个时间单位执行一次
  • m,n 表示mn都执行
  • #m 表示第二个,如* * * * * 0#m表示每个月的第二个周日

7.1.4. start

时间戳或时间字符串,如

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

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