Skip to content
hellocron.com

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.

Download hellocron.sh (v1.2-260704)
SHA-256 checksum
d605440146df5e3c7d7738cf364d88ca3e99d144fb40e2f0da50204a1a582be3 Verify against published .sha256 View source on GitHub

v1.6.1-260924 (unreleased)

  • Interactive discover-server-apps offers to install the printed cron file into /etc/cron.d. Requires root, writes atomically with mode 0644, and asks separately before replacing an existing file, keeping a hidden backup. --yes, -o and 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, so hellocron discover-server-apps --yes > /etc/cron.d/hellocron-server-health is a complete install; --items, --all, --host, --backup-dir, --disk-threshold, --dry-run and -o cover scripts and provisioning. Needs a management key and a plan with config as code.
  • apply and export report 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)

  • run preserves the job’s original umask. ANSI colors and other control characters no longer produce invalid ping JSON.
  • discover preserves 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. configure returns 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.

  • doctor reports 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 run update; 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-check skips the request.
  • Day and month names are accepted: 5 4 * * sun, 0 8 * * MON and 30 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, an if) is handed to /bin/sh -c instead of being executed directly. run is 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>&1 stays outside, so the client’s own output is silenced too.
  • System crontabs are handled: in /etc/crontab and /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 as root, 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, sessionclean instead of test, command, cd, if. Tabs between the schedule fields are handled, and @midnight is 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.

  • configure asks 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 name sets it up without prompting, and --advanced still asks for the API URL and ping endpoint for self-hosted or staging installs.
  • run hands 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.
  • discover builds monitor names from the URL or the script instead of the first word on the line: fakturex-fcron, not curl-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-prefix puts 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 or HELLOCRON_HOSTNAME, which matters in containers where the hostname is a random hex. doctor prints the host it would report.

v1.4-260911

Released 2026-09-11. New name, new home.

  • The script is hellocron.sh, downloaded from https://hellocron.com/hellocron.sh; hellocron update checks that URL.
  • Config files are ~/.hellocron.conf and ~/.hellocron-management.conf; environment variables are HELLOCRON_API_KEY, HELLOCRON_MANAGEMENT_KEY, HELLOCRON_PANEL_URL.
  • Default endpoints point at api.hellocron.com and app.hellocron.com.
  • New hello:cron header in help, doctor and version.

v1.3-260727

Released 2026-07-27. Config as code from the command line.

  • hellocron export downloads every monitor on the account as a single bundle file.
  • hellocron apply -f monitors.json reconciles the account with that file, with --dry-run to preview the changes first. Apply never deletes: monitors missing from the bundle are reported as orphaned and left alone.
  • hellocron configure --management-key stores 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_KEY takes 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/export refuse an ingest key (ck_), and pings refuse a management key (mk_).
  • hellocron doctor reports 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 (and update --check): SHA-256 verification, syntax check, and a .bak backup before replacing.
  • Environment diagnostics via hellocron doctor.
  • Configurable timeouts, verbose mode, telemetry toggle, and default-project support.

New releases are added above this entry.