// CRON JOB MANAGER

EVERY SCHEDULED TASK,
VISIBLE AND CONTROLLABLE.

Kronos replaces the scattered systemd timers and cronjobs across the MelTuc platform with a single database-driven scheduler. Every blueprint that needs a recurring task registers an HTTP endpoint. Kronos calls it on schedule, records the result, and alerts you when something goes wrong. Manage all platform automation from one dashboard — no SSH, no systemd reloads, no guesswork.

Open Kronos See How It Works
1 min
Dispatch Cycle
Interval
or Cron Syntax
Run Dots
Visual History
3+
Failures → Alert

All Platform Jobs. One Grid.

The Kronos dashboard opens with a stats bar showing total jobs, how many are healthy, how many are disabled, how many are in an error state, and how many are currently running. Below the stats, the jobs grid lists every scheduled task with its current status, schedule, next run countdown, last HTTP code, and a five-dot run history sparkline. Clicking any row opens the detail pane on the right.

meltuc.tech/kronos/app
11
Total Jobs
9
Healthy
1
Disabled
1
Errored
0
Running
Job Name Schedule Next Run HTTP History
Mellissa Inbox Pull every 300s in 3m 12s 200
GHT Velocity Alerts cron: 0 * * * * in 42m 200
NLG Auto-Generate cron: 0 6 * * 5 in 6d 402
InboxPurge Daily Scan cron: 0 2 * * *
PoGo Daily Weather every 3600s in 18m 200
MELLISSA INBOX PULL
MethodPOST
URL/mellissa/api/cron/pull
Scheduleevery 300 seconds
Last Run2 min ago — 200 OK (142ms)
Next Runin 3m 12s
Failures0 consecutive
Run Now
Edit
Delete

Interval or Cron. Your Choice.

Kronos supports two scheduling modes. Interval mode repeats every N seconds after the previous run completes — ideal for polling jobs like inbox pulls or data collectors. Cron mode uses the standard 5-field cron expression — ideal for jobs that need to run at a specific time of day or day of week. You can switch modes at any time by editing the job.

Interval Mode
Enter a number of seconds. The next run is scheduled that many seconds after the previous run finishes. Quick-fill presets for the most common intervals are available in the create/edit form.
Common Intervals
300Every 5 minutes
900Every 15 minutes
1800Every 30 minutes
3600Every 1 hour
86400Every 24 hours
Cron Mode
Enter a 5-field cron expression: minute, hour, day-of-month, month, day-of-week. Kronos evaluates expressions in UTC. Jobs fire within 60 seconds of the scheduled time.
Example Expressions
* * * * *Every minute
0 * * * *Every hour at :00
0 2 * * *Daily at 2:00 AM
0 6 * * 5Fridays at 6:00 AM
0 9 1 * *1st of every month at 9am

See Every Run. Spot Patterns Fast.

The detail pane for each job shows a full run history table — started timestamp, duration in milliseconds, trigger (scheduler or manual), HTTP status code, and the first 100 characters of the response body. Above the table, a Chart.js bar chart visualises duration_ms across the last 50 runs, making it immediately obvious if a job is slowing down. Teal bars for successful runs, red for failures.

meltuc.tech/kronos/app — NLG Auto-Generate
DURATION — LAST 20 RUNS
# Started Duration Trigger Status HTTP Response
1 2026-05-07 06:00:02 82ms scheduler error 402 {"error": "Payment Required"}
2 2026-05-06 06:00:04 91ms scheduler error 402 {"error": "Payment Required"}
3 2026-04-30 06:00:01 4820ms scheduler ok 200 {"status": "ok", "generated": 3}

3 Failures in a Row? You Hear About It.

Kronos tracks a consecutive_failures counter for every job. Each failure increments the counter. A successful run resets it to zero. When the counter reaches 3, Kronos fires a Herald alert and sends a Telegram message to the ops channel. This means a single transient failure is silent — only a persistent pattern triggers a notification. The dashboard highlights any job with consecutive_failures >= 3 in red.

Telegram — MelTuc Ops
🚨 KRONOS FAILURE ALERT
Job NLG Auto-Generate has failed 3 consecutive times.

Last error: HTTP 402 — Payment Required
URL: http://127.0.0.1:5010/nlg/api/cron/auto-generate
Consecutive failures: 3
Sent by Kronos via shared.alerting.emit_herald_alert() · 2026-05-07 06:00:12
Also recorded in Herald dashboard at meltuc.tech/herald/app — level: CRITICAL, source_app: kronos

What Kronos Can Do.

1-Minute Dispatcher
systemd fires a POST to /kronos/api/dispatch every 60 seconds. The dispatcher finds all due jobs, fires each one, and records the result. No polling gaps, no drift.
🕐
Interval + Cron Scheduling
Fixed-interval (every N seconds) or 5-field cron expression. Switch modes by editing the job — no restart needed. next_run_at recalculates on save.
🔴
Run Dot Sparklines
Five colored circles per job row show the last 5 run outcomes at a glance. Teal = ok. Red = error. Amber = timeout. Gray = no data yet.
📊
Duration Bar Chart
Chart.js bar chart of duration_ms across the last 50 runs per job. Instantly see if a job is getting slower or experienced a sudden spike.
🚨
Consecutive Failure Alerts
Counter tracks back-to-back failures. At 3+, Telegram and Herald are notified automatically. Counter resets to 0 on the next successful run.
▶️
Run Now Button
Fire any job immediately outside its schedule. Runs in a background thread so the UI is not blocked. Trigger column shows 'manual' in run history.
🔁
Retry Policy & Backoff
Set per-job max retries with fixed or exponential backoff. A failed run reschedules itself sooner — exponential doubles the delay each attempt, capped at one hour — then returns to its normal cadence on success.
🔗
Job Dependencies
Chain jobs with depends_on. A dependent job is skipped each cycle until its predecessor's last run succeeds — cycle-protected, so circular chains are rejected. InboxPurge is auto-wired to run after Mellissa triage.
📡
Completion Webhooks
Attach up to 10 http/https URLs to any job. After every run, Kronos POSTs a {job_id, job_name, status, ran_at} payload — fire-and-forget, so a downstream failure never blocks the job.
🧮
Cron Explainer
Validate a 5-field cron expression before saving and preview its next 5 run times in UTC. Catch typos and surprise schedules without waiting for a missed run.
📈
Stats & Activity Heatmap
Per-job 30-day rollup — success rate, average duration, last error — plus a 7×24 day-of-week/hour heatmap that shows exactly when a job runs and where errors cluster.
// GET STARTED

Every Scheduled Task. One Place.

Replace scattered cron jobs and systemd timers with a database-driven scheduler you can see, edit, and control from a browser. Kronos runs the platform so you do not have to watch it.

Open Kronos

Requires a MelTuc administrator account. Sign in.