trailpack-cron
v2.0.0
Published
Add Trails service for running cron tasks
Downloads
17
Maintainers
Readme
trailpack-cron
:package: 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
module.exports = {
...
packs: [
...
require('trailpack-cron'),
...
]
...
}
Static jobs can be added on config/cronjs` :
// config/cron.js
module.exports = {
jobs: {
myJob: {
schedule: '* * * * * *',
onTick: function (app) {
app.log.info('I am ticking every second');
},
onComplete: function (app) {
app.log.info('I am done');
},
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.js
module.exports = {
cluster: {
host: 'localhost',
auth_pass: ''
db: 0,
ttl: 600 // Default TTL
},
jobs: {
myJob: {
schedule: '* * * * * *',
onTick: function (app) {
app.log.info('I am ticking every second');
},
onComplete: function (app) {
app.log.info('I am done');
},
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 :beers:!