# schedule **Repository Path**: mmstudio/schedule ## Basic Information - **Project Name**: schedule - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: HEAD - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-15 - **Last Updated**: 2025-09-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 1. Node.js Service - [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) ## 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)