# sails-hook-cronjob

> Sails hook for running tasks by cron

Latest version **1.0.5** (published 2022-10-30) · MIT license · 0 weekly downloads

## Install

```sh
npm install sails-hook-cronjob
pnpm add sails-hook-cronjob
yarn add sails-hook-cronjob
bun add sails-hook-cronjob
```

## 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.0.5 |
| Published | 2022-10-30 |
| First published | 2022-10-29 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 6.9 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | Daniel Rataj |
| Maintainers | danielrataj |
| Keywords | sails, hook, cron |

## Links

- npm: https://www.npmjs.com/package/sails-hook-cronjob
- Repository: https://github.com/danielrataj/sails-hook-cronjob
- Homepage: https://github.com/danielrataj/sails-hook-cronjob#readme
- Issues: https://github.com/danielrataj/sails-hook-cronjob/issues
- npm.io page: https://npm.io/package/sails-hook-cronjob

## Dependencies (1)

- [cron](https://npm.io/package/cron.md) ^2.1.0

## Alternatives

- [mobx-react](https://npm.io/package/mobx-react.md) — 2.8M weekly downloads
- [rc-tree](https://npm.io/package/rc-tree.md) — 2.6M weekly downloads
- [@react-oauth/google](https://npm.io/package/@react-oauth/google.md) — 1.3M weekly downloads
- [@wagmi/connectors](https://npm.io/package/@wagmi/connectors.md) — 877.0K weekly downloads
- [vee-validate](https://npm.io/package/vee-validate.md) — 836.4K weekly downloads

## Recent versions

- 1.0.5 (latest) — 2022-10-30
- 1.0.4 — 2022-10-29
- 1.0.2 — 2022-10-29
- 1.0.1 — 2022-10-29
- 1.0.0 — 2022-10-29

## README

# sails-hook-cronjob

![Downloads](https://img.shields.io/npm/dm/sails-hook-cronjob.svg)
![Downloads](https://img.shields.io/npm/dt/sails-hook-cronjob.svg)
![npm version](https://img.shields.io/npm/v/sails-hook-cronjob.svg)

Sails hook for running cron tasks based on [sails-hook-cron](https://github.com/ghaiklor/sails-hook-cron) 👍

## Getting Started

Install it via npm:

```shell
npm install sails-hook-cronjob
```

Configure `config/cronjob.js` in your project:

```javascript
module.exports.cronjob = {
  myFirstJob: {
    schedule: '* * * * * *',
    onTick: function () {
      console.log('You will see this every second');
      console.log(`Also, sails object is available as this, e.g. ${this.config.environment}`);
    }
  }
};
```

## Examples

Schedule field syntax is:

```javascript

// ['seconds', 'minutes', 'hours', 'dayOfMonth', 'month', 'dayOfWeek']

module.exports.cronjob = {
  firstJob: {
    schedule: '30 47 15 17 may *',
    // in May 17 15:47:30 GMT-0300 (BRT)
    onTick: function() {
      console.log('I will trigger in May 17 15:47:30');
    },
    timezone: 'America/Sao_Paulo'
    // timezone Brazil example
  }
};
```

You can define cron tasks only with required fields:

```javascript
module.exports.cronjob = {
  firstJob: {
    schedule: '* * * * * *',
    onTick: function() {
      console.log('I am triggering every second');
    }
  },

  secondJob: {
    schedule: '*/5 * * * * *',
    onTick: function() {
      console.log('I am triggering every five seconds');
    }
  }
};
```

You can define advanced fields:

```javascript
module.exports.cronjob = {
  myJob: {
    schedule: '* * * * * *',
    onTick: function() {
      console.log('I am triggering when time is come');
    },
    onComplete: function() {
      console.log('I am triggering when job is complete');
    },
    start: true, // Start task immediately
    timezone: 'Ukraine/Kiev', // Custom timezone
    context: undefined, // Custom context for onTick callback
    runOnInit: true // Will fire your onTick function as soon as the request initialization has happened.
  }
};
```

You can get created jobs and start\\stop them when you wish:

```javascript
// config/cronjob.js
module.exports.cronjob = {
  myJob: {
    schedule: '* * * * * *',
    onTick: function() {
      console.log('I am triggering when time is come');
    },
    start: false
  }
};

// api/controllers/SomeController.js
module.exports = {
  someAction: function(req, res) {
    sails.hooks.cronjob.jobs.myJob.start();
    sails.hooks.cronjob.jobs.myJob.stop();
  }
};
```

You can also run cron after specified Sails lifecycle event ("ready" by default):

```javascript
// config/cronjob.js
module.exports.cronjob = {
  myJob: {
    on: 'ready',
    schedule: '* * * * * *',
    onTick: function() {
      console.log('I am triggering when time is come');
    },
    start: false
  }
};
```

You can also use the "guard" feature to allow/deny cronjob from running. It is useful for example when you want to run a cronjob only on a specific environment (backend workers, etc.):

```javascript
// config/cronjob.js
module.exports.cronjob = {
  myJob: {
    guard: async () => {
      return true
    },
    schedule: '* * * * * *',
    onTick: function() {
      console.log('I am triggering when time is come');
    }
  }
};
```

## Context

There are three states for the context, i.e. this on `onTick` call:

-   When you don’t declare context - `this` points to the Sails object.
-   If you declare it as a null (`context: null`), `this` points to the original context from the cron library.
-   Otherwise, if you declare a context with some object (`context: {foo: 'bar'}`), `this` will point to the object instead.

## License

[MIT](./LICENSE)

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