@xen-orchestra/cron

Focused, well maintained, cron parser/scheduler

Usage no npm install needed!

<script type="module">
  import xenOrchestraCron from 'https://cdn.skypack.dev/@xen-orchestra/cron';
</script>

README

@xen-orchestra/cron Build Status

Focused, well maintained, cron parser/scheduler

Install

Installation of the npm package:

> npm install --save @xen-orchestra/cron

Pattern syntax

<minute> <hour> <day of month> <month> <day of week>

Each entry can be:

  • a single value
  • a range (0-23 or */2)
  • a list of values/ranges (1,8-12)

A wildcard (*) can be used as a shortcut for the whole range (first-last).

Step values can be used in conjunctions with ranges. For instance, 1-7/2 is the same as 1,3,5,7.

Field Allowed values
minute 0-59
hour 0-23
day of the month 1-31 or 3-letter names (jan, feb, …)
month 0-11
day of week 0-7 (0 and 7 both mean Sunday) or 3-letter names (mon, tue, …)

Note: the month range is 0-11 to be compatible with cron, it does not appear to be very standard though.

API

createSchedule(pattern: string, zone: string = 'utc'): Schedule

Create a new schedule.

  • pattern: the pattern to use, see the syntax
  • zone: the timezone to use, use 'local' for the local timezone
import { createSchedule } from '@xen-orchestra/cron'

const schedule = createSchedule('0 0 * * sun', 'America/New_York')

Schedule#createJob(fn: Function): Job

Create a new job from this schedule.

  • fn: function to execute, if it returns a promise, it will be awaited before scheduling the next run.
const job = schedule.createJob(() => {
  console.log(new Date())
})

Schedule#next(n: number): Array<Date>

Returns the next dates matching this schedule.

  • n: number of dates to return
schedule.next(2)
// [ 2018-02-11T05:00:00.000Z, 2018-02-18T05:00:00.000Z ]

Schedule#startJob(fn: Function): () => void

Start a new job from this schedule and return a function to stop it.

  • fn: function to execute, if it returns a promise, it will be awaited before scheduling the next run.
const stopJob = schedule.startJob(() => {
  console.log(new Date())
})
stopJob()

Job#start(): void

Start this job.

job.start()

Job#stop(): void

Stop this job.

job.stop()

Development

# Install dependencies
> yarn

# Run the tests
> yarn test

# Continuously compile
> yarn dev

# Continuously run the tests
> yarn dev-test

# Build for production (automatically called by npm install)
> yarn build

Contributions

Contributions are very welcomed, either on the documentation or on the code.

You may:

  • report any issue you've encountered;
  • fork and create a pull request.

License

ISC © Vates SAS