Kettle
Scheduled jobs that tell you when they did not run
One binary, one configuration file, no daemon to keep alive. Reads a schedule, runs the thing, and complains loudly when it fails.
Getting started
Three minutes
Install it
One binary. No runtime, no package manager, nothing to add to a path you do not control.
Write a schedule
A file with one job per block: when to run, what to run, and who to tell when it breaks.
Run it
In the foreground to watch it, or under whatever supervisor you already use.
What it does
And what it deliberately does not
Runs on a schedule
Intervals and calendar expressions, with time zones handled properly.
Tells you about failures
By exit code, by log line, and by whatever notifier you configure.
Keeps the last run
So a job that has silently stopped running is visible rather than assumed.
Does not queue
If a job is still running when the next one is due, it says so and skips.
Does not distribute
One machine, one Kettle. If you need a cluster, this is the wrong tool.
Start with the guide
It is nine pages and it assumes nothing.