cron-as-a-service

Remote cron service

npm install cron-as-a-service
2 downloads in the last week
19 downloads in the last month

cron-as-a-service

A simple remote cron service using Node.js and MongoDB.

Features

  • Each cron job polls a web resource via a GET request at regular intervals.
  • Familiar cron scheduling (e.g. '00 30 11 2-6') (powered by node-cron).
  • Comprehensive RESTful API for creating, listing, updating and deleting cron jobs
  • Easy installation and zero administration

Installation

Clone the repository from GitHub and install dependencies using npm:

> git clone git://github.com/fzaninotto/cron-as-a-service.git
> npm install

Start the application with:

> node app

Head to the API root for a list of available resources:

http://localhost:8082/api/

Jobs CRUD

A job is composed of an expression and an url.

// to create a job, send a POST request to the /api/job route
curl -d 'expression=* * * * * *&url=http://localhost:8888' http://localhost:8082/api/job
// to list jobs, send a GET requst to the /api/job route
curl http://localhost:8082/api/job
// to update a job, send a PUT request to the /api/job/:id route
curl -X PUT -d 'expression=* * * * * *&url=http://localhost:8888' http://localhost:8082/api/job/4fcd284b87cf3b5a07000004
// to remove a job, send a DELETE request to the /api/job/:id route
curl -X DELETE http://localhost:8082/api/job/4fcd284b87cf3b5a07000004

The job expression follows the cron pattern syntax described here.

Tip: You can start the provided dummy target to test the job polling:

> node fixtures/dummyTarget.js

Customization

Uptime uses node-config to allow YAML configuration and environment support. Here is the default configuration, taken from config/default.yaml:

mongodb:
  server:   localhost
  database: cron
  user:     root 
  password:

server:
  port:     8082

To modify this configuration, create a development.yaml or a production.yaml file in the same directory, and override just the settings you need. For instance, to run the service on port 80 in production, create a production.yaml file as follows:

server:
  port:     80

LICENSE

The code is free to use and distribute, under the MIT license.

TODO

  • Web GUI
  • Record response status for each executed job
  • Run jobs in a separate process
  • Deal with web proxies
npm loves you