Cronicle

Cronicle

A multi-server task scheduler with scheduled jobs as configuration

Manages
Cronicle job scheduler
Language
Node.js
CLI
control.sh
Config file
config.json
config.json
{
  "title": "DB Reindex",
  "enabled": 1,
  "category": "43f8c57e",
  "plugin": "test",
  "target": "db1.int.myserver.com",
  "timezone": "America/New_York",
  "timing": {
    "hours": [ 21 ],
    "minutes": [ 20, 40 ]
  },
  "retries": 0,
  "retry_delay": 30,
  "timeout": 3600,
  "notes": "This event handles database maintenance.",
  "web_hook": "http://myserver.com/notify-chronos.php"
}
In short

Cronicle is a multi-server task scheduler and job runner built on Node.js, with a web UI and a JSON REST API. It replaces scattered crontabs with one central schedule that has history, retries, and failover. Because every event is JSON, you can keep the schedule in Git and push it from CI.

What is Cronicle?

Cronicle is a multi-server task scheduler and job runner with a web UI. It is built on Node.js, not Ruby. It handles scheduled, repeating, and on-demand jobs across many worker servers, with live stats and a log viewer. Unlike the Ruby gems in the codenize-tools family, Cronicle is a full server you install and run.

It earned its place in the directory as the toolbox's job runner. Every part of it is JSON you can manage as configuration. The problem it solves is crontab sprawl: jobs scattered across servers, no history, no failover, and no record of who changed what. Cronicle centralizes the schedule. Its JSON REST API lets you create, export, and update events from scripts, so the schedule can live in version control and ship from CI, in the spirit of codenization.

It fits teams that outgrew plain cron but do not want a heavy workflow engine. One install gives scheduling, a UI for operators, and an API for automation.

Key facts
  • A Node.js multi-server job scheduler with a web UI, not a Ruby gem.
  • Every job is a JSON event you can export, diff, and commit.
  • Managed through a JSON REST API with per-key privileges.
  • Has no dry-run; the Git diff and a staging instance are your safety net.
  • For hosted cron managed the same way, see Ecman.
  • Actively maintained, with xyOps named as its successor.
Illustration: Cronicle job scheduler managed as code with Cronicle
Getting started

Install and run Cronicle

1

Install

Install via your package manager.

$ curl -s https://raw.githubusercontent.com/jhuckaby/Cronicle/master/bin/install.js | node
2

Export current state

Pull the live Cronicle configuration into a config.json.

$ curl "http://localhost:3012/api/app/get_schedule/v1?api_key=YOUR_API_KEY"
3

Dry-run, then apply

Preview the diff, then apply the change for real.

$ curl -X POST -H "Content-Type: application/json" -d @event.json "http://localhost:3012/api/app/create_event/v1"

Cronicle has no Ruby DSL and no built-in dry-run. Even so, the same export, review, apply loop maps onto its JSON REST API. Export the full schedule with the get_schedule endpoint (authenticated by an API key) and commit the JSON to Git. Each event, its title, plugin, target, timing, retries, and limits, is a plain JSON document that diffs cleanly in a pull request.

To change a job, edit the JSON and push it back with create_event or update_event. The API key needs the matching create_events or edit_events privilege. Because there is no dry-run, the review step carries the weight. The Git diff is your change plan, and a staging Cronicle instance is the safest place to test it first. Server settings live in config.json, which you can version-control directly.

Pro tip

There is no dry-run, so stage risky jobs with enabled: 0. The event exists and can be reviewed, but it will not fire until you flip it on.

Capabilities

What Cronicle can do

Multi-server scheduling with failover

Jobs can target server groups or single hostnames. Failover to backup servers is automatic, and new servers can be auto-discovered as the cluster grows.

Web UI with live logs

A built-in front end shows real-time job status, a live log viewer, and CPU and memory graphs. Operators do not need shell access to see what ran.

JSON REST API with API keys

Endpoints like <code>get_schedule</code>, <code>create_event</code>, and <code>update_event</code> speak plain JSON. API keys with granular privileges are the hook that makes schedules manageable as code.

Plugins in any language

Jobs run through plugins, which are just executables that read JSON from stdin. Write them in shell, Python, Node.js, or anything on the worker.

Job control primitives

Events support retries with delay, timeouts, concurrency limits, job queuing, catch-up runs for missed schedules, and per-event timezones.

Resource limits and webhooks

Per-job CPU and memory limits stop runaway tasks. Webhooks plus success and failure alerts tie job outcomes into chat and alerting.

Plain cron vs Cronicle
Plain crontabCronicle
Edited on each serverOne central schedule for the whole cluster
No run historyFull history, live logs, and stats
No retries or timeoutsBuilt-in retries, timeouts, and queuing
Silent if a server diesAutomatic failover to backup workers
Hard to reviewJSON events you can diff in Git
In practice

When teams reach for Cronicle

Replacing scattered crontabs

Move per-server cron entries into one Cronicle cluster. Jobs gain history, retries, timeouts, and a UI. The schedule stops being undocumented <code>crontab -l</code> output across machines.

Schedules managed from CI

Keep event definitions as JSON files in a repo and apply them through the REST API on merge. New jobs and timing changes get review, and the API key's privileges limit what CI can touch.

Batch jobs on worker pools

Target a server group so nightly ETL or reindex jobs run on whichever worker is free. Failover covers a downed primary, and CPU and memory limits protect co-tenant work.

On-demand jobs behind an API

Define an event with no timing and it becomes on-demand only. Users run it in the UI, or remote apps call <code>run_event</code>. It is a light way to expose operational scripts safely.

FAQ

Cronicle questions, answered

Is Cronicle actively maintained?
Yes. The project stays active, with the author focused on bug fixes and security patches. He has also announced xyOps as Cronicle's spiritual successor. Evaluate xyOps for greenfield work while relying on Cronicle as a proven scheduler.
How is Cronicle different from the Ruby codenize tools?
Tools like Gratan or Barkdog are thin CLIs that reconcile a DSL file against an outside service. Cronicle is the service: a Node.js server you install and run. It appears here because its JSON config and REST API make its schedule manageable as code.
Is there a dry-run mode?
Not really. The API applies changes directly, so the review happens earlier. Keep event JSON in Git, treat the diff as the change plan, and test on a staging instance. Disabling an event (enabled: 0) is a practical way to stage a job before it runs.
What do I need to install it?
A POSIX OS (Linux or macOS) and a Node.js LTS release. The documented installer sets up /opt/cronicle. After that, control.sh setup initializes storage and control.sh start launches the server on port 3012.
Can one Cronicle instance schedule jobs on many servers?
Yes, that is its core design. A primary server runs the scheduler and UI while workers run jobs. Events target groups or specific hostnames, and the cluster handles failover if the primary goes down.