Shell client changelog
The download at https://hellocron.com/hellocron.sh always serves the latest version listed below. Older entries are history, they are not kept as separate downloads. Run hellocron update to move to the latest, or hellocron version to see what you have installed.
d605440146df5e3c7d7738cf364d88ca3e99d144fb40e2f0da50204a1a582be3 Verify against published .sha256 View source on GitHubv1.6.1-260924 (unreleased)
- Interactive
discover-server-appsoffers to install the printed cron file into/etc/cron.d. Requires root, writes atomically with mode0644, and asks separately before replacing an existing file, keeping a hidden backup.--yes,-oand redirected stdout keep their existing behavior.
v1.6.0-260922 (unreleased)
- New command
discover-server-apps: detects the services installed on the host (nginx, Apache, certbot, PostgreSQL, MySQL/MariaDB, Redis, MongoDB) and whether they are running, lets you tick the checks on a list, creates the matching Server health monitors through the preset API and prints the cron file. The cron file is the only thing on stdout, sohellocron discover-server-apps --yes > /etc/cron.d/hellocron-server-healthis a complete install;--items,--all,--host,--backup-dir,--disk-threshold,--dry-runand-ocover scripts and provisioning. Needs a management key and a plan with config as code. applyandexportreport the real HTTP status when a request fails. They used to say “no connection” for every error, including a rejected key or a validation problem.
v1.5.4-260914 (unreleased)
runpreserves the job’s original umask. ANSI colors and other control characters no longer produce invalid ping JSON.discoverpreserves quoted hashes and backslash escapes, runs environment assignments through a shell, and quotes project names and client paths safely.- Options missing their values fail promptly.
configurereturns a failure when the configuration cannot be written or secured.
v1.5.3-260913 (current)
Released 2026-09-13. The client now tells you about the plan limit, without ever failing a job over it.
- Quota state is read from the response headers of every ping and reported on stderr: approaching the limit, over it, or monitoring suspended, each with the date the quota resets. Running out of quota never changes the exit code and never fails a job. That is the whole point: a ping comes from a curl line in a crontab, so answering it with an error would make cron treat a job that ran perfectly as failed and mail its owner about it. A billing problem must not become a production incident.
- Messages from the ping request reach the terminal at all. They used to be captured into a variable nobody read, so every warning the request produced disappeared silently.
- Nothing changes for self-hosted installs or older servers: no quota headers means no messages.
v1.5.2-260912
Released 2026-09-12. discover understands the crontabs that actually exist, and doctor answers whether the client is current.
doctorreports whether the installed client is the current one. It asks for the published version, names it when a newer one exists and tells you to runupdate; a pending update is a warning, not a failed health check. When the download host cannot be reached the line says so instead of claiming either answer.--no-update-checkskips the request.- Day and month names are accepted:
5 4 * * sun,0 8 * * MONand30 2 1 JAN *are ordinary crontab(5) syntax and were being skipped without a word, so the jobs they scheduled were left unmonitored. - A command built out of shell syntax (
&&,||,;, a pipe, a redirection, anif) is handed to/bin/sh -cinstead of being executed directly.runis not a shell:test -x /usr/sbin/anacron || { cd / && run-parts /etc/cron.daily; }used to be monitored up to the first operator only, and the part that did the work ran outside the monitor. A trailing>/dev/null 2>&1stays outside, so the client’s own output is silenced too. - System crontabs are handled: in
/etc/crontaband/etc/cron.d/*the sixth field is the user to run as, detected from the file name or forced with--system/--user-crontab. The user stays where cron expects it and no longer becomes the monitor name, so a whole directory of jobs no longer arrives asroot,root-5ef365,root-913b85. - Monitor names come from the program that does the work, not from the shell plumbing around it:
run-parts-cron-daily,debian-sa1,sessioncleaninstead oftest,command,cd,if. Tabs between the schedule fields are handled, and@midnightis recognised along with the other nicknames. - Expressions cron would refuse to load are skipped instead of being proposed: Quartz extensions (
0 0 14W * *,0 0 * * 6#5,LW), a sixth schedule field, full day names (friday), plain typos. A rejected crontab file takes every other job down with it, so a missing proposal is the safer answer.
v1.5.1-260912
Released 2026-09-12. One question at setup, names you can read in the dashboard.
configureasks for the ingest key and nothing else. The API address is built into the client, so a config file holds just the key.configure --api-key ck_xxx --project namesets it up without prompting, and--advancedstill asks for the API URL and ping endpoint for self-hosted or staging installs.runhands the command’s output back on the stream it came from. It was captured for the ping and never printed, which silently emptied crontab lines that append to a log file and stopped cron from mailing a failure.discoverbuilds monitor names from the URL or the script instead of the first word on the line:fakturex-fcron, notcurl-16f0fd. Names are sanitised to the character set the API accepts, so a dot in a script filename no longer produces a monitor whose every ping is rejected. A short hash is appended only when two jobs would otherwise share a name.- Prompts show a stub of the stored key instead of the whole thing.
discover --host-prefixputs the short hostname in front of every generated name, for one crontab deployed to several servers. Without it names stay per job, because a monitor name cannot be changed later and a host can be renamed.- The reported host can be pinned with
hostname=in the config file orHELLOCRON_HOSTNAME, which matters in containers where the hostname is a random hex.doctorprints the host it would report.
v1.4-260911
Released 2026-09-11. New name, new home.
- The script is
hellocron.sh, downloaded fromhttps://hellocron.com/hellocron.sh;hellocron updatechecks that URL. - Config files are
~/.hellocron.confand~/.hellocron-management.conf; environment variables areHELLOCRON_API_KEY,HELLOCRON_MANAGEMENT_KEY,HELLOCRON_PANEL_URL. - Default endpoints point at
api.hellocron.comandapp.hellocron.com. - New
hello:cronheader inhelp,doctorandversion.
v1.3-260727
Released 2026-07-27. Config as code from the command line.
hellocron exportdownloads every monitor on the account as a single bundle file.hellocron apply -f monitors.jsonreconciles the account with that file, with--dry-runto preview the changes first. Apply never deletes: monitors missing from the bundle are reported as orphaned and left alone.hellocron configure --management-keystores the Management API key in~/.hellocron-management.conf(permissions 600), kept separate from~/.hellocron.conf. The ingest key belongs on every monitored server; the management key can delete monitors along with their history, so the two never share a file.HELLOCRON_MANAGEMENT_KEYtakes precedence and is the right choice for CI.- Mixing the two keys up is now caught locally with an explanatory message instead of a bare
401:apply/exportrefuse an ingest key (ck_), and pings refuse a management key (mk_). hellocron doctorreports the management key and the permissions of its config file when present.
v1.2-260704
Released 2026-07-04. First public release, served at the download URL.
- Job lifecycle pings (
run,complete,fail,skip) and command wrapping with automatic exit-code reporting. - Interactive setup via
hellocron configure, with configuration stored in~/.hellocron.conf. - Cron job discovery via
hellocron discover: detects existing cron jobs and generates a monitoring config. - Self-update via
hellocron update(andupdate --check): SHA-256 verification, syntax check, and a.bakbackup before replacing. - Environment diagnostics via
hellocron doctor. - Configurable timeouts, verbose mode, telemetry toggle, and default-project support.
New releases are added above this entry.