Node.js 定时任务:node-cron

定时任务作用

简单来说,就是能在指定时间启动的脚本逻辑。

一般用于:

  • CI:例如静态构建
  • 异步任务:例如订单超时、邮件检查
  • 清理/检查数据:例如分布式事务失败,定时检查发现异常,回滚数据

Node 启动定时任务

1、安装依赖

1
2
npm install node-cron execa
npm install -g pm2

node-cron.js 支持 cron 语法,并且支持精确到 second(秒级),会定时启动任务。

execa.js 执行 shell 命令

pm2 用来启动 node.js 守护进程,防止 shell 关闭,定时任务脚本挂掉。

2、编写定时任务代码

假设具体路逻辑写在了 cronjob.sh 中(也可以写在其他的 js 文件中),并且每天的 23:30 会执行。

那么代码如下:

1
2
3
4
5
6
7
8
9
// cronjob.js

const cron = require("node-cron");
const execa = require("execa");
const path = require("path");

cron.schedule("30 23 * * *", () => {
execa(path.join(__dirname, "cronjob.sh")).stdout.pipe(process.stdout);
});

3、pm2 开启进程

1
pm2 start cronjob.js

More