Cronhoster
Scheduled scripts, self-hosted. A folder of crons, mirrored to your own server.
crons/
digest/ → one cron
cronhoster-cron-handler.js → the entry point the server runs
cronhoster-cron-settings.json → when it runs, and how many may overlap
node_modules/ → its own bundled dependencies
backup/ → another cron
cronhoster-cron-handler.js
cronhoster-cron-settings.json
_next/ → staged next version (leading _ = local only)
How it works
Create and test your crons locally, and when you are ready the local scripts mirror them up to the server, which runs each on its schedule.
A cron is a directory
A directory with a cronhoster-cron-handler.js and a
cronhoster-cron-settings.json. The settings name the cron's runs; the handler is what
runs. No crontab, no dashboard.
Your own runner
The server reads the clock once a second and runs a cron's handler when its settings match, inside a
dedicated Node application, not the box's system cron. Times are UTC.
Named runs, controlled overlap
Each cron lists named runs, each a schedule of month, day, hour, minute and second. A cron runs one
handler at a time by default, or up to a maxConcurrent you set.
Self-contained, versioned by rename
Every cron is a complete little world of its own: no common scripts, no shared libraries to reason about across crons.
Everything in one directory
The server runs cronhoster-cron-handler.js; every library, config or vendored module it
imports sits right beside it. A cron is uploaded once, whole, and then never re-synced, so there are
no shared files to version.
A new version is a new directory
Stage the next version as _<name>; the leading _ keeps it local while
you test. Drop the underscore to go live, then remove the old directory. No in-place edits to a
running cron.
Part of the Localhoster family
Cronhoster is one of a set of small, self-hosted services that all work the same way - a directory of domain folders, mirrored to your own server.