Skip to content

clementslowik/cronviz

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 

Repository files navigation

cronviz

One command to know what's scheduled to run on this server, when, and whether it actually ran last time.

cronviz is a stdlib-only Python tool that scans every scheduling source on a Linux box (/etc/crontab, /etc/cron.d/, /etc/cron.{hourly,daily,weekly,monthly}/, per-user crontabs in /var/spool/cron/, and systemctl list-timers) and produces a unified, time-ordered view of every scheduled job: name, schedule, source file, next run, last run (when known).

It's the answer to the question every SRE/devops engineer asks at 3 AM: "what is actually scheduled to run on this box?"

Why

A typical Linux server in 2026 runs scheduled work from at least four sources:

  • /etc/crontab — root-managed system jobs
  • /etc/cron.d/* — package-installed cron snippets
  • /etc/cron.{hourly,daily,weekly,monthly}/ — interval directories
  • /var/spool/cron/<user> — per-user crontabs (and crontab -l shows nothing if you're not the right user)
  • systemctl list-timers — systemd timer units (now the modern default for many packages)

Anyone who has SSH'd into a server and tried to figure out why a script ran at 3:14 AM knows the pain. There is no single command that lists all of this. crontab -l shows your own crontab. systemctl list-timers shows systemd. find /etc/cron* shows cron snippets but not their actual schedule. None of them join across sources or sort by next run time.

cronviz fixes that.

Status

v0.2 (2026-04-08). Local CLI. Reads all sources, produces unified output, and optionally annotates each job with its last-run timestamp via --history. Stdlib only, no external dependencies.

Roadmap:

Version What it adds Status
v0.1 CLI scan, table/JSON/TSV/Markdown output, stdlib only ✅ shipped
v0.2 Last-run history (--history) via systemctl show + journalctl SYSLOG_IDENTIFIER=CRON ✅ shipped
v0.3 Web dashboard (Flask, single-server) planned
v0.4 Multi-server agent + hosted SaaS tier (paid) planned

Install (planned)

pip install cronviz
cronviz                       # default table view
cronviz --json                # machine-readable
cronviz --md > report.md      # markdown report for incidents
cronviz --history             # annotate each job with its last-run timestamp
cronviz --history --user www-data --md  # markdown report of www-data jobs with history

Real output example (this server, v0.2 with --history)

NAME                          SCHEDULE         USER  SOURCE                 NEXT_RUN              LAST_RUN              COMMAND
sysstat-collect.timer         systemd-timer    root  systemctl list-timers  2026-04-09 00:00 UTC  2026-04-08 22:50 UTC  sysstat-collect.service
man-db.timer                  systemd-timer    root  systemctl list-timers  2026-04-09 04:58 UTC  2026-04-08 03:48 UTC  man-db.service
fstrim.timer                  systemd-timer    root  systemctl list-timers  2026-04-13 00:27 UTC  2026-04-06 00:40 UTC  fstrim.service
command (sysstat cron)        5-55/10 * * * *  root  sysstat                                      2026-04-08 22:45 UTC  command -v debian-sa1 ...

Why "boring stack"

Same philosophy as the rest of my projects:

  • Stdlib only for the CLI. No requests, no click, no rich. The tool runs on a fresh Python 3.9+ install with zero deps.
  • Single file if possible, three files maximum. Easy to audit, easy to vendor.
  • No daemon, no service for v0.1. You run it, it prints, it exits.
  • SQLite + Flask + systemd for the future hosted version. Same pattern that runs Funding Finder on a $5 VPS.

License

MIT (planned). Open source. The hosted version is the paid product, the CLI is the vitrine.

About

stdlib-only CLI for unified cron + systemd timer observability on one Linux server. Shows what is scheduled, when, and whether it ran last time. MIT.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages