266 lines
8.6 KiB
Markdown
266 lines
8.6 KiB
Markdown
|
|
# Cron Plugin
|
||
|
|
|
||
|
|
This plugin adds support for running cronjob to Elysia server.
|
||
|
|
|
||
|
|
## Installation
|
||
|
|
|
||
|
|
```bash
|
||
|
|
bun add @elysiajs/cron
|
||
|
|
```
|
||
|
|
|
||
|
|
## Basic Usage
|
||
|
|
```typescript twoslash
|
||
|
|
import { Elysia } from 'elysia'
|
||
|
|
import { cron } from '@elysiajs/cron'
|
||
|
|
|
||
|
|
new Elysia()
|
||
|
|
.use(
|
||
|
|
cron({
|
||
|
|
name: 'heartbeat',
|
||
|
|
pattern: '*/10 * * * * *',
|
||
|
|
run() {
|
||
|
|
console.log('Heartbeat')
|
||
|
|
}
|
||
|
|
})
|
||
|
|
)
|
||
|
|
.listen(3000)
|
||
|
|
```
|
||
|
|
|
||
|
|
The above code will log `heartbeat` every 10 seconds.
|
||
|
|
|
||
|
|
## Config
|
||
|
|
Below is a config which is accepted by the plugin
|
||
|
|
|
||
|
|
### cron
|
||
|
|
|
||
|
|
Create a cronjob for the Elysia server.
|
||
|
|
|
||
|
|
```
|
||
|
|
cron(config: CronConfig, callback: (Instance['store']) => void): this
|
||
|
|
```
|
||
|
|
|
||
|
|
`CronConfig` accepts the parameters specified below:
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### CronConfig.name
|
||
|
|
|
||
|
|
Job name to register to `store`.
|
||
|
|
|
||
|
|
This will register the cron instance to `store` with a specified name, which can be used to reference in later processes eg. stop the job.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### CronConfig.pattern
|
||
|
|
|
||
|
|
Time to run the job as specified by cron syntax.
|
||
|
|
|
||
|
|
```
|
||
|
|
┌────────────── second (optional)
|
||
|
|
│ ┌──────────── minute
|
||
|
|
│ │ ┌────────── hour
|
||
|
|
│ │ │ ┌──────── day of the month
|
||
|
|
│ │ │ │ ┌────── month
|
||
|
|
│ │ │ │ │ ┌──── day of week
|
||
|
|
│ │ │ │ │ │
|
||
|
|
* * * * * *
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### CronConfig.timezone
|
||
|
|
Time zone in Europe/Stockholm format
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### CronConfig.startAt
|
||
|
|
Schedule start time for the job
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### CronConfig.stopAt
|
||
|
|
Schedule stop time for the job
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### CronConfig.maxRuns
|
||
|
|
Maximum number of executions
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
### CronConfig.catch
|
||
|
|
Continue execution even if an unhandled error is thrown by a triggered function.
|
||
|
|
|
||
|
|
### CronConfig.interval
|
||
|
|
The minimum interval between executions, in seconds.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## CronConfig.Pattern
|
||
|
|
Below you can find the common patterns to use the plugin.
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Pattern
|
||
|
|
|
||
|
|
Below you can find the common patterns to use the plugin.
|
||
|
|
|
||
|
|
## Stop cronjob
|
||
|
|
|
||
|
|
You can stop cronjob manually by accessing the cronjob name registered to `store`.
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
import { Elysia } from 'elysia'
|
||
|
|
import { cron } from '@elysiajs/cron'
|
||
|
|
|
||
|
|
const app = new Elysia()
|
||
|
|
.use(
|
||
|
|
cron({
|
||
|
|
name: 'heartbeat',
|
||
|
|
pattern: '*/1 * * * * *',
|
||
|
|
run() {
|
||
|
|
console.log('Heartbeat')
|
||
|
|
}
|
||
|
|
})
|
||
|
|
)
|
||
|
|
.get(
|
||
|
|
'/stop',
|
||
|
|
({
|
||
|
|
store: {
|
||
|
|
cron: { heartbeat }
|
||
|
|
}
|
||
|
|
}) => {
|
||
|
|
heartbeat.stop()
|
||
|
|
|
||
|
|
return 'Stop heartbeat'
|
||
|
|
}
|
||
|
|
)
|
||
|
|
.listen(3000)
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## Predefined patterns
|
||
|
|
|
||
|
|
You can use predefined patterns from `@elysiajs/cron/schedule`
|
||
|
|
|
||
|
|
```typescript
|
||
|
|
import { Elysia } from 'elysia'
|
||
|
|
import { cron, Patterns } from '@elysiajs/cron'
|
||
|
|
|
||
|
|
const app = new Elysia()
|
||
|
|
.use(
|
||
|
|
cron({
|
||
|
|
name: 'heartbeat',
|
||
|
|
pattern: Patterns.everySecond(),
|
||
|
|
run() {
|
||
|
|
console.log('Heartbeat')
|
||
|
|
}
|
||
|
|
})
|
||
|
|
)
|
||
|
|
.get(
|
||
|
|
'/stop',
|
||
|
|
({
|
||
|
|
store: {
|
||
|
|
cron: { heartbeat }
|
||
|
|
}
|
||
|
|
}) => {
|
||
|
|
heartbeat.stop()
|
||
|
|
|
||
|
|
return 'Stop heartbeat'
|
||
|
|
}
|
||
|
|
)
|
||
|
|
.listen(3000)
|
||
|
|
```
|
||
|
|
|
||
|
|
### Functions
|
||
|
|
|
||
|
|
| Function | Description |
|
||
|
|
| ---------------------------------------- | ----------------------------------------------------- |
|
||
|
|
| `.everySeconds(2)` | Run the task every 2 seconds |
|
||
|
|
| `.everyMinutes(5)` | Run the task every 5 minutes |
|
||
|
|
| `.everyHours(3)` | Run the task every 3 hours |
|
||
|
|
| `.everyHoursAt(3, 15)` | Run the task every 3 hours at 15 minutes |
|
||
|
|
| `.everyDayAt('04:19')` | Run the task every day at 04:19 |
|
||
|
|
| `.everyWeekOn(Patterns.MONDAY, '19:30')` | Run the task every Monday at 19:30 |
|
||
|
|
| `.everyWeekdayAt('17:00')` | Run the task every day from Monday to Friday at 17:00 |
|
||
|
|
| `.everyWeekendAt('11:00')` | Run the task on Saturday and Sunday at 11:00 |
|
||
|
|
|
||
|
|
### Function aliases to constants
|
||
|
|
|
||
|
|
| Function | Constant |
|
||
|
|
| ----------------- | ---------------------------------- |
|
||
|
|
| `.everySecond()` | EVERY_SECOND |
|
||
|
|
| `.everyMinute()` | EVERY_MINUTE |
|
||
|
|
| `.hourly()` | EVERY_HOUR |
|
||
|
|
| `.daily()` | EVERY_DAY_AT_MIDNIGHT |
|
||
|
|
| `.everyWeekday()` | EVERY_WEEKDAY |
|
||
|
|
| `.everyWeekend()` | EVERY_WEEKEND |
|
||
|
|
| `.weekly()` | EVERY_WEEK |
|
||
|
|
| `.monthly()` | EVERY_1ST_DAY_OF_MONTH_AT_MIDNIGHT |
|
||
|
|
| `.everyQuarter()` | EVERY_QUARTER |
|
||
|
|
| `.yearly()` | EVERY_YEAR |
|
||
|
|
|
||
|
|
### Constants
|
||
|
|
|
||
|
|
| Constant | Pattern |
|
||
|
|
| ---------------------------------------- | -------------------- |
|
||
|
|
| `.EVERY_SECOND` | `* * * * * *` |
|
||
|
|
| `.EVERY_5_SECONDS` | `*/5 * * * * *` |
|
||
|
|
| `.EVERY_10_SECONDS` | `*/10 * * * * *` |
|
||
|
|
| `.EVERY_30_SECONDS` | `*/30 * * * * *` |
|
||
|
|
| `.EVERY_MINUTE` | `*/1 * * * *` |
|
||
|
|
| `.EVERY_5_MINUTES` | `0 */5 * * * *` |
|
||
|
|
| `.EVERY_10_MINUTES` | `0 */10 * * * *` |
|
||
|
|
| `.EVERY_30_MINUTES` | `0 */30 * * * *` |
|
||
|
|
| `.EVERY_HOUR` | `0 0-23/1 * * *` |
|
||
|
|
| `.EVERY_2_HOURS` | `0 0-23/2 * * *` |
|
||
|
|
| `.EVERY_3_HOURS` | `0 0-23/3 * * *` |
|
||
|
|
| `.EVERY_4_HOURS` | `0 0-23/4 * * *` |
|
||
|
|
| `.EVERY_5_HOURS` | `0 0-23/5 * * *` |
|
||
|
|
| `.EVERY_6_HOURS` | `0 0-23/6 * * *` |
|
||
|
|
| `.EVERY_7_HOURS` | `0 0-23/7 * * *` |
|
||
|
|
| `.EVERY_8_HOURS` | `0 0-23/8 * * *` |
|
||
|
|
| `.EVERY_9_HOURS` | `0 0-23/9 * * *` |
|
||
|
|
| `.EVERY_10_HOURS` | `0 0-23/10 * * *` |
|
||
|
|
| `.EVERY_11_HOURS` | `0 0-23/11 * * *` |
|
||
|
|
| `.EVERY_12_HOURS` | `0 0-23/12 * * *` |
|
||
|
|
| `.EVERY_DAY_AT_1AM` | `0 01 * * *` |
|
||
|
|
| `.EVERY_DAY_AT_2AM` | `0 02 * * *` |
|
||
|
|
| `.EVERY_DAY_AT_3AM` | `0 03 * * *` |
|
||
|
|
| `.EVERY_DAY_AT_4AM` | `0 04 * * *` |
|
||
|
|
| `.EVERY_DAY_AT_5AM` | `0 05 * * *` |
|
||
|
|
| `.EVERY_DAY_AT_6AM` | `0 06 * * *` |
|
||
|
|
| `.EVERY_DAY_AT_7AM` | `0 07 * * *` |
|
||
|
|
| `.EVERY_DAY_AT_8AM` | `0 08 * * *` |
|
||
|
|
| `.EVERY_DAY_AT_9AM` | `0 09 * * *` |
|
||
|
|
| `.EVERY_DAY_AT_10AM` | `0 10 * * *` |
|
||
|
|
| `.EVERY_DAY_AT_11AM` | `0 11 * * *` |
|
||
|
|
| `.EVERY_DAY_AT_NOON` | `0 12 * * *` |
|
||
|
|
| `.EVERY_DAY_AT_1PM` | `0 13 * * *` |
|
||
|
|
| `.EVERY_DAY_AT_2PM` | `0 14 * * *` |
|
||
|
|
| `.EVERY_DAY_AT_3PM` | `0 15 * * *` |
|
||
|
|
| `.EVERY_DAY_AT_4PM` | `0 16 * * *` |
|
||
|
|
| `.EVERY_DAY_AT_5PM` | `0 17 * * *` |
|
||
|
|
| `.EVERY_DAY_AT_6PM` | `0 18 * * *` |
|
||
|
|
| `.EVERY_DAY_AT_7PM` | `0 19 * * *` |
|
||
|
|
| `.EVERY_DAY_AT_8PM` | `0 20 * * *` |
|
||
|
|
| `.EVERY_DAY_AT_9PM` | `0 21 * * *` |
|
||
|
|
| `.EVERY_DAY_AT_10PM` | `0 22 * * *` |
|
||
|
|
| `.EVERY_DAY_AT_11PM` | `0 23 * * *` |
|
||
|
|
| `.EVERY_DAY_AT_MIDNIGHT` | `0 0 * * *` |
|
||
|
|
| `.EVERY_WEEK` | `0 0 * * 0` |
|
||
|
|
| `.EVERY_WEEKDAY` | `0 0 * * 1-5` |
|
||
|
|
| `.EVERY_WEEKEND` | `0 0 * * 6,0` |
|
||
|
|
| `.EVERY_1ST_DAY_OF_MONTH_AT_MIDNIGHT` | `0 0 1 * *` |
|
||
|
|
| `.EVERY_1ST_DAY_OF_MONTH_AT_NOON` | `0 12 1 * *` |
|
||
|
|
| `.EVERY_2ND_HOUR` | `0 */2 * * *` |
|
||
|
|
| `.EVERY_2ND_HOUR_FROM_1AM_THROUGH_11PM` | `0 1-23/2 * * *` |
|
||
|
|
| `.EVERY_2ND_MONTH` | `0 0 1 */2 *` |
|
||
|
|
| `.EVERY_QUARTER` | `0 0 1 */3 *` |
|
||
|
|
| `.EVERY_6_MONTHS` | `0 0 1 */6 *` |
|
||
|
|
| `.EVERY_YEAR` | `0 0 1 1 *` |
|
||
|
|
| `.EVERY_30_MINUTES_BETWEEN_9AM_AND_5PM` | `0 */30 9-17 * * *` |
|
||
|
|
| `.EVERY_30_MINUTES_BETWEEN_9AM_AND_6PM` | `0 */30 9-18 * * *` |
|
||
|
|
| `.EVERY_30_MINUTES_BETWEEN_10AM_AND_7PM` | `0 */30 10-19 * * *` |
|