Import from Crontab
Paste an existing crontab into UptimeHunt to bulk-create cron monitors, then copy back the wrapped crontab lines that ping them.
Import from Crontab
If you already maintain a crontab with several scheduled jobs, Import from crontab turns it into cron monitors in one pass instead of creating them one at a time — and hands you back the same crontab with each line wrapped to ping its new monitor.
Start the import
- Go to Cron Jobs and click Import from crontab.
- Paste your crontab into the text box. Shell environment-variable assignments (
MAILTO=…,PATH=…,SHELL=…) and commented-out jobs (#0 2 * * * …) are skipped automatically — only lines that look like an active schedule are treated as candidates. - Click Next: preview.
Review the preview
Each recognized line becomes a row you can adjust before anything is created:
| Column | What it is |
|---|---|
| Include | Checkbox — uncheck any row you don't want imported |
| Name | Editable, pre-filled from your crontab's own labels (see below), falling back to the command (e.g. /usr/local/bin/backup.sh --full becomes backup.sh --full) |
| Schedule | The schedule rendered human-readably, in the timezone you pick |
| Command | The original crontab command, unchanged, shown for reference only |
Names come from your comments
The importer reads the comment directly above each job as its name — a crontab like:
# Download a new cacert.pem version from curl.se
0 1 * * * cd /srv/certs && curl --remote-name https://curl.se/ca/cacert.pemimports as a monitor named Download a new cacert.pem version from curl.se. Blank lines, environment lines and commented-out jobs break that association, so an unrelated file-header comment never becomes a job's name.
Jobs managed by configuration-management tools are recognized by the marker each tool writes, and named accordingly:
| Tool | Marker read |
|---|---|
Ansible (ansible.builtin.cron) | #Ansible: <name> |
Puppet (cron resource) | # Puppet Name: <name> |
Chef (cron resource) | # Chef Name: <name> |
Salt (cron state) | # … SALT_CRON_IDENTIFIER:<identifier> (a human comment on the same line wins over the identifier) |
Every pre-filled name stays editable in the preview.
Pick the timezone your crontab actually runs in at the top of the preview — These jobs run in — before importing; it's applied to every monitor created in this batch (crontab itself has no per-line timezone, so this is the one place to set it).
A line the parser can't recognize isn't silently dropped
Lines that don't parse as a schedule (fewer than 5 fields, or an unrecognized @macro such as @reboot, which has no fixed time to monitor) are excluded from the preview table and counted in a "skipped" note above it — check that count against what you pasted if a job you expected doesn't show up.
Import
Click Import N monitors. Each checked row is created as a separate cron monitor, one request at a time (not in parallel) — every organization has a monitor quota, so importing sequentially means a batch that hits the limit partway through still keeps everything created before the limit was reached, and reports exactly which rows failed and why.
Copy the wrapped crontab back
The results screen shows how many monitors were created (and any failures, with the reason for each), then your whole crontab reproduced line for line — comments, environment lines, blank lines and skipped entries untouched — with each successfully-imported job line rewritten to ping its new monitor. It is safe to replace the entire original file with it:
0 4 * * * /usr/local/bin/backup.sh && curl -fsS -m 10 --retry 5 -o /dev/null https://ping.uptimehunt.io/<ping_token_1>
@hourly /usr/bin/healthcheck.sh && curl -fsS -m 10 --retry 5 -o /dev/null https://ping.uptimehunt.io/<ping_token_2>By default this is the success-only form (&&). Uncheck Success-only form on the results screen for the exit-code-trap alternative, which reports every run, not just successes:
0 4 * * * /usr/local/bin/backup.sh; curl -fsS -m 10 --retry 5 -o /dev/null https://ping.uptimehunt.io/<ping_token_1>/$?Click Copy all, then replace the original lines in your crontab (crontab -e) with the copied output. See Cron Job Monitoring for the rest of the ping idioms — including the exit-code-trap variant that also attaches a log excerpt — if you want more than the two forms offered here.
Related Documentation
Monitor systemd Timers
Wire a systemd.timer-triggered service to UptimeHunt using OnFailure= and ExecStartPost=, without editing the job's own script.
Alerting & Integrations
Connect UptimeHunt to notification channels including Slack, Discord, Telegram, Email, Webhook, and more. Configure alert delivery for incidents.