# timer **Repository Path**: joker_mm/timer ## Basic Information - **Project Name**: timer - **Description**: No description available - **Primary Language**: NodeJS - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-05-20 - **Last Updated**: 2021-07-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README * 安装 npm i
或者使用淘宝镜像
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm i
* 全局安装pm2
npm install pm2 -g
* pm2 启动命令
pm2 start pm2Start.json --env dev(这个dev是环境变量)
查看日志 pm2 logs
查看内存 pm2 monit
平滑重启 pm2 reload async
重启 pm2 restart async
删除日志 pm2 flush
pm2日志默认存储在 /home/username/.pm2/logs
pm2 startup,这个命令会在系统 /etc/systemd/system/ 路径下生成一个 pm2-root.service 文件用来开机启动 pm2 服务。
pm2 save, 保存当前 pm2 运行的各个应用保存到 /root/.pm2/dump.pm2 下,开机重启时读取该文件中的内容启动相关应用。
### pm2 日志文件过大不分割和自动删除解决
* 安装插件 pm2 install pm2-logrotate * 直接看配置,也可以通过指令pm2 conf pm2-logrotate来查看详细的配置 #### 安装之后默认配置 * $ pm2 set pm2-logrotate:max_size 10M 单个日志文件的大小 * $ pm2 set pm2-logrotate:retain 30 保留文件个数,多余自动删除 * $ pm2 set pm2-logrotate:compress false 是否通过gzip压缩日志 * $ pm2 set pm2-logrotate:dateFormat YYYY-MM-DD_HH-mm-ss 日志文件名中的日期格式 * $ pm2 set pm2-logrotate:workerInterval 30 设置启动几个工作进程监控日志尺寸,最小为1 * $ pm2 set pm2-logrotate:rotateInterval 0 0 * * * 设置强制分割,默认值是0 0 * * *,意思是每天晚上0点分割,这个足够了个人觉得 * $ pm2 set pm2-logrotate:rotateModule true 把pm2本身的日志也进行分割 ### 配置说明 配置项 | 简介 ---- | ----- max_size | 单个日志文件的大小 retain | 保留文件个数,多余自动删除 compress | 是否通过gzip压缩日志 dateFormat | 日志文件名中的日期格式 workerInterval | 设置启动几个工作进程监控日志尺寸,最小为1 rotateInterval | 设置强制分割,默认值是0 0 * * *,意思是每天晚上0点分割,这个足够了个人觉得 rotateModule | 把pm2本身的日志也进行分割 * 项目日志文件存在 ./logs/ 目录下面 ### 设置定时任务 #### 请求地址:http://192.168.8.233:9015/timer/set #### 请求参数 参数描述 | 参数名 | 类型 | 是否必填 | 备注 ---- | ----- | ------ | ----- | ---- 创建时间 | create_time | string | 是 | 格式(YYYY-mm-dd HH:mm:ss) 回调地址 | notify_url | string | 是 | 请求类型 | type | int | 是 | 1 单次 2 每天 3 每周 4 每月 触发时间 | trigger_time | int | 是 | 请求类型为"1"时则为时间格式(YYYY-mm-dd HH:mm:ss) 回调数据 | data | string | 是 | json字符串 签名 | sign | string | 是 | 查看签名规则 #### 请求类型不为"1"时请求格式为 * * * * * * * * * * * * ┬ ┬ ┬ ┬ ┬ ┬ │ │ │ │ │ | │ │ │ │ │ └ day of week (0 - 7) (0 or 7 is Sun) │ │ │ │ └───── month (1 - 12) │ │ │ └────────── day of month (1 - 31) │ │ └─────────────── hour (0 - 23) │ └──────────────────── minute (0 - 59) └───────────────────────── second (0 - 59, OPTIONAL) 秒 分 时 日 月 周 30 * * * * * 代表每分钟30秒执行 30 1 * * * * 代表每小时1分30秒执行,依此类推 #### 回调回执:业务操作完成之后请返回小写 success 否则重发(第一次0s,第二次20s,第三次40s,第四次80s,第五次160s,五次之后不会进行发送) #### 你修改数据的时候重新设置定时任务记得调用关闭定时接口,关闭之前的定时任务 #### 返回参数 参数描述 | 参数名 | 类型 | 是否必填 | 备注 ---- | ----- | ------ | ----- | ---- 请求状态 | code | int | 是 | 200 请求成功 -200 请求失败 返回描述 | msg | string | 是 | 返回参数 | data | array | 是 | 定时器ID | data.id | string | 是 | 关闭定时器时需要 ### 关闭定时任务 #### 请求地址:http://192.168.8.233:9015/timer/cancel #### 请求参数 参数描述 | 参数名 | 类型 | 是否必填 | 备注 ---- | ----- | ------ | ----- | ---- 创建时间 | create_time | string | 是 | 格式(YYYY-mm-dd HH:mm:ss) 回调数据 | id | string | 是 | 定时器ID 签名 | sign | string | 是 | 查看签名规则 ### 签名 1. 参数按照A-Z排序(去除空参数和sign参数)得到 let A = k1=v1&k2=v2…… 2. 拼接密钥 let B = A+"&key="+key 得到 B 3. 进行MD5运算 let sign = crypto.createHash('md5').update(B).digest('hex'); 4. 赋值给sign