Skip to main content

定时任务

strapi 自带了定时任务功能。

添加任务定义

创建任务定义文件:config/cron-tasks.js,内容如下:

config/cron-tasks.js
module.exports = {
test: {
task: ({ strapi }) => {
console.log('test crons...', new Date().getTime());
},
options: {
// At minute 15 past every 4th hour from 0 through 23.
rule: '15 0-23/4 * * *',
tz: 'Asia/Shanghai',
},
},
};

启用定时任务

修改config/server.js,添加配置如下:

config/server.js
const cronTasks = require('./cron-tasks');
module.exports = ({ env }) => ({
host: env('HOST', '0.0.0.0'),
port: env.int('PORT', 1337),
app: {
keys: env.array('APP_KEYS'),
},
cron: {
enabled: true,
tasks: cronTasks,
},
});

pm2 多进程问题

如果用 pm2 启多个进程,会导致定时任务重复触发,可以设置仅在主任务触发定时任务,判断主任务:

const isMainCluster = parseInt(process.env.NODE_APP_INSTANCE, 10) === 0;

对应config/server.js修改:

config/server.js
const cronTasks = require('./cron-tasks');
const isMainCluster = parseInt(process.env.NODE_APP_INSTANCE, 10) === 0;
module.exports = ({ env }) => ({
host: env('HOST', '0.0.0.0'),
port: env.int('PORT', 1337),
app: {
keys: env.array('APP_KEYS'),
},
cron: {
// 仅 main cluster 执行
enabled: isMainCluster,
tasks: cronTasks,
},
});