trailpack-cron v2.0.0
trailpack-cron
:package: Add Trails service for running cron tasks
Intallation
With yo :
npm install -g yo generator-trails
yo trails:trailpack trailpack-cronWith 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:!