trailpack-cron
📦 Add Trails service for running cron tasks
Intallation
With yo :
npm install -g yo generator-trails
yo trails:trailpack trailpack-cron
With npm (you will have to create config file manually) :
npm install --save trailpack-cron
Configuration
First you need to add this trailpack to your main configuration :
// config/main.js moduleexports = ... packs: ... ... ...
Static jobs can be added on config/cronjs` :
// config/cron.jsmoduleexports = jobs: myJob: schedule: '* * * * * *' { applog; } { applog; } start: true // Start task immediately timezone: 'France/Paris' // Custom timezone
Annotation
You can use Cron
annotation on methods services, for this you need to install trailpack-annotations :
After install just add your annotations :
'use strict'
const Service = require('trails-service')
/**
* @module DefaultService
*
* @description Default Service included with a new Trails app
* @see {@link http://trailsjs.io/doc/api/services}
* @this TrailsApp
*/
module.exports = class DefaultService extends Service {
/**
* @Cron('* * * * * *')
*/
hello(){
this.app.log.info('Run every second :)')
}
/**
* @Cron({schedule: '* * * * * *', start: true, timezone: 'Europe/Paris'})
*/
world(){
this.app.log.info('Run every second too :)')
}
}
Usage
Now you can send start/stop jobs like this :
this.app.services.CronService.jobs.myJob.start()
this.app.services.CronService.jobs.myJob.stop()
this.app.services.CronService.addJob('mySecondJob', {
schedule: '*/5 * * * * *',
onTick: function (app) {
app.log.info('I am ticking every 5 seconds');
},
onComplete: function (app) {
app.log.info('I am done');
},
start: true, // Start task immediately
timezone: 'France/Paris' // Custom timezone
})
Cluster Mode (Redis Support)
For use in a Cluster Mode for preventing the jobs running on all server. Only one server of the cluster be run a job in a distributively form. You only need configure a redis server in the cron.js config file.
// config/cron.jsmoduleexports = cluster: host: 'localhost' auth_pass: '' db: 0 ttl: 600 // Default TTL jobs: myJob: schedule: '* * * * * *' { applog; } { applog; } start: true // Start task immediately timezone: 'France/Paris' // Custom timezone
For advanced options for the Redis Client take a look here: Node Redis Client Options
License
Support on Beerpay
Hey dude! Help me out for a couple of 🍻!