# Cron jobs
PREREQUISITES
The cron.enabled
configuration option should be set to true
in the ./config/server.js
file.
cron
allows scheduling arbitrary functions for execution at specific dates, with optional recurrence rules. These functions are named cron jobs. cron
only uses a single timer at any given time, rather than reevaluating upcoming jobs every second/minute.
This feature is powered by the node-schedule
(opens new window) package.
The cron
format consists of:
* * * * * *
┬ ┬ ┬ ┬ ┬ ┬
│ │ │ │ │ |
│ │ │ │ │ └ 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)
To define cron jobs and have them run at the required times:
💡 TIP
Optionally, cron jobs can be directly created in the cron.tasks
key of the server configuration file.
# Creating a cron job
To define a cron job, create a file with the following structure:
// path: ./config/cron-tasks.js
module.exports = {
/**
* Simple example.
* Every monday at 1am.
*/
'0 0 1 * * 1': ({ strapi }) => {
// Add your own logic here (e.g. send a queue of email, create a database backup, etc.).
},
};
If the cron job is required to run based on a specific timezone, configure it like the following:
module.exports = {
/**
* Cron job with timezone example.
* Every Monday at 1am for Asia/Dhaka timezone.
* List of valid timezones: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
*/
'0 0 1 * * 1': {
task: ({ strapi }) => { /* Add your own logic here */ },
options: {
tz: 'Asia/Dhaka',
},
},
};
# Enabling cron jobs
To enable cron jobs, set cron.enabled
to true
in the server configuration file and declare the jobs:
// path: ./config/server.js
const cronTasks = require("./cron-tasks");
module.exports = ({ env }) => ({
host: env("HOST", "0.0.0.0"),
port: env.int("PORT", 1337),
cron: {
enabled: true,
tasks: cronTasks,
},
});