# cron-scheduler

> Runs jobs in periodic intervals

Latest version **1.2.0** (published 2017-08-10) · MIT license · 0 weekly downloads

## Install

```sh
npm install cron-scheduler
pnpm add cron-scheduler
yarn add cron-scheduler
bun add cron-scheduler
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.2.0 |
| Published | 2017-08-10 |
| First published | 2016-01-09 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 5 |
| Known vulnerabilities | 0 (+2 in 1 direct dependencies) |
| Install scripts | no |
| GitHub stars | 35 |
| Author | Rico Sta. Cruz |
| Maintainers | rstacruz |
| Keywords | cron, cronjob, crontab, schedule |

## Links

- npm: https://www.npmjs.com/package/cron-scheduler
- Repository: https://github.com/rstacruz/cron-scheduler
- Homepage: https://github.com/rstacruz/cron-scheduler#readme
- Issues: https://github.com/rstacruz/cron-scheduler/issues
- npm.io page: https://npm.io/package/cron-scheduler

## Dependencies (5)

- [pretty-ms](https://npm.io/package/pretty-ms.md) 2.1.0
- [any-promise](https://npm.io/package/any-promise.md) 0.1.0
- [long-timeout](https://npm.io/package/long-timeout.md) ^0.1.1
- [cron-converter](https://npm.io/package/cron-converter.md) 0.0.8
- [moment-timezone](https://npm.io/package/moment-timezone.md) 0.5.0

## Alternatives

- [cron](https://npm.io/package/cron.md) — 4.9M weekly downloads
- [@vercel/queue](https://npm.io/package/@vercel/queue.md) — 731.6K weekly downloads
- [create-sonicjs](https://npm.io/package/create-sonicjs.md) — 1.6K weekly downloads
- [@exellix/jobs-api](https://npm.io/package/@exellix/jobs-api.md) — 941 weekly downloads
- [@forwardimpact/libskill](https://npm.io/package/@forwardimpact/libskill.md) — 575 weekly downloads

## Recent versions

- 1.2.0 (latest) — 2017-08-10
- 1.0.0 — 2016-01-09

## README

# cron-scheduler

> Runs jobs in periodic intervals

cron-scheduler is a way to run functions at specific times of the day. It runs
in Node.js as well as the browser.

It requires a Promise implementation to work. If you're on Node.js v4 or
later, you should be fine. Otherwise, you'll also need to install
[bluebird](https://github.com/petkaantonov/bluebird) (or [rsvp], [when], or [q.js]).

[rsvp]: https://www.npmjs.com/package/rsvp
[q.js]: https://github.com/kriskowal/q
[when]: https://github.com/cujojs/when

[![Status](https://travis-ci.org/rstacruz/cron-scheduler.svg?branch=master)](https://travis-ci.org/rstacruz/cron-scheduler "See test builds")

## cron()
> `cron(options, function)`

Starts a cronjob.

```js
var cron = require('cron-scheduler')

cron({ on: '0 9 * * *' }, function () {
  console.log('this will run every 9:00am')
})
```

#### Options
The `options` parameter is an object with these things:

- `on` *(String, required)* - the schedule in cron format (`min hour day
  month day-of-week`).
- `timezone` *(String)* - the timezone to run it in.
- `name` *(String)* - identifier to show in the debug logs. Means nothing
  if debugging is off.

```js
cron({
  timezone: 'Asia/Manila'
  on: '0 9 * * *',
  name: 'dostuff'
} , function () {
  console.log('this will run every 9:00am')
})
```

#### Cron strings
The `options.on` parameter is in cron standard format. Check the [cron
cheatsheet](http://ricostacruz.com/cheatsheets/cron.html) for more details.
Here are some examples:

```
0 9 * * *    - every 9:00AM
0 12 * * 1   - every 12:00PM on mondays
0 */2 * * *  - every 2 hours
```

#### Errors
Any errors will be thrown, and will stop the scheduler. If this is not
what you want, you may wish to decorate the function being passed.

```js
cron({ on: '0 9 * * *' }, trap(work))

function trap (fn) {
  return function () {
    return Promise.resolve(fn.apply(this, arguments))
      .catch(function (err) {
        // do stuff.
        // this handler will work for both promise rejections
        // *and* regular errors.
      })
  }
}
```

#### Promises
If `function` returns a Promise, it will wait for it to finish before
scheduling the next job. If the promise is rejected, it will be an unhandled
rejection (!). You may use the same `trap()` decorator trick above to get
around this.

#### Stopping
To stop the cronjob, just run the `stop` method returned by `cron()`.

```js
job = cron({ on: '0 12 * * *' }, work)
job.stop()
```

#### Manually starting
To manually invoke the cronjob, run the `run` method returned  by `cron()`.
This will not stop the next scheduled invocation.

```js
job = cron({ on: '0 12 * * *' }, work)
job.run()
```

## cron.debug

> `cron.debug(function)`

Sets the debug function.

```js
cron.debug(console.log.bind(console))
```

You can pass your custom logger here. For instance, you can use the [debug][]
module for prettier messages.

```js
cron.debug(require('debug')('cron'))
```

[debug]: https://www.npmjs.com/package/debug

## Thanks

**cron-scheduler** © 2016+, Rico Sta. Cruz. Released under the [MIT] License.<br>
Authored and maintained by Rico Sta. Cruz with help from contributors ([list][contributors]).

> [ricostacruz.com](http://ricostacruz.com) &nbsp;&middot;&nbsp;
> GitHub [@rstacruz](https://github.com/rstacruz) &nbsp;&middot;&nbsp;
> Twitter [@rstacruz](https://twitter.com/rstacruz)

[MIT]: http://mit-license.org/
[contributors]: http://github.com/rstacruz/cron-scheduler/contributors

---
_Source: https://npm.io/package/cron-scheduler · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
