Bulk Import
Import heartbeats from crontab files or Kubernetes CronJob YAML manifests.
Overview
If you already have cron jobs running in production, you can import them all at once instead of creating heartbeats manually. Cronping parses your crontab file or Kubernetes CronJob YAML and creates a heartbeat for each entry with the correct schedule, timezone, and a sensible grace period.
Navigate to Dashboard → Heartbeats → Import to get started, or click the Import button in the heartbeats list.
Supported formats
| Format | Source |
|---|---|
| Crontab | Output of crontab -l, crontab files, /etc/cron.d/* |
| Kubernetes YAML | CronJob manifests (single or multi-document) |
Importing from crontab
Paste the contents of your crontab file or the output of crontab -l:
# Copy your crontab
crontab -l | pbcopy # macOS
crontab -l | xclip # LinuxWhat gets parsed
- Cron schedule — the five-field expression (
min hour dom mon dow) - Command name — extracted from the command path and used as the heartbeat name
- Timezone — detected from
TZ=orCRON_TZ=environment variables in the file - User field — automatically skipped when present (e.g.
root,postgres) - Comments and env vars — ignored
Example input
CRON_TZ=America/Sao_Paulo
# Database backup — daily at 2am
0 2 * * * postgres /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
# Stripe billing sync — every 15 minutes
*/15 * * * * root /app/scripts/stripe-sync.py
# Temp file cleanup — Sunday at 3am
0 3 * * 0 root /usr/local/bin/cleanup.sh
# ETL pipeline — weekdays at 8am
0 8 * * 1-5 ubuntu /app/etl/run.shThis creates 4 heartbeats with America/Sao_Paulo timezone:
| Name | Schedule | Grace |
|---|---|---|
backup.sh | 0 2 * * * | 30 min |
stripe-sync.py | */15 * * * * | 5 min |
cleanup.sh | 0 3 * * 0 | 30 min |
run.sh | 0 8 * * 1-5 | 30 min |
Importing from Kubernetes
Paste one or more Kubernetes CronJob manifests. Multi-document YAML (separated by ---) is supported. Only resources with kind: CronJob are processed — other resource types like Deployments or Services are ignored.
What gets parsed
metadata.name— used as the heartbeat namespec.schedule— the cron expressionspec.timeZone— timezone (Kubernetes 1.27+)metadata.namespaceandmetadata.labels— auto-generated tags (prefixed withk8s)
Example input
apiVersion: batch/v1
kind: CronJob
metadata:
name: database-backup
namespace: production
labels:
app: myapp
tier: backend
spec:
schedule: "0 2 * * *"
timeZone: "America/Sao_Paulo"
jobTemplate:
spec:
template:
spec:
containers:
- name: backup
image: postgres:16
command: ["pg_dump", "$(DATABASE_URL)"]
---
apiVersion: batch/v1
kind: CronJob
metadata:
name: stripe-sync
namespace: production
labels:
app: myapp
spec:
schedule: "*/15 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: sync
image: myapp:latest
command: ["python", "stripe_sync.py"]This creates 2 heartbeats:
| Name | Schedule | Timezone | Tags |
|---|---|---|---|
database-backup | 0 2 * * * | America/Sao_Paulo | k8s production myapp backend |
stripe-sync | */15 * * * * | UTC | k8s production myapp |
Import workflow
Paste or upload
Choose the format (Crontab or Kubernetes YAML), then paste the content or upload a file (.txt, .yaml, .yml). Click Analyze.
Review and edit
Cronping shows a preview table with all detected heartbeats. You can:
- Rename — click the heartbeat name to edit it
- Change grace period — use the dropdown to pick a different value
- Remove entries — delete heartbeats you don't want to import
Create heartbeats
Click Create N heartbeats to import everything in one batch. Cronping validates all cron expressions and checks your plan limit before creating.
Add ping URLs
After import, Cronping displays the Ping URL for each heartbeat. Copy the curl command and add it to each cron job:
# Append to your cron entry
0 2 * * * /usr/local/bin/backup.sh && curl -fsS --retry 3 https://ping.cronping.com/<token>For Kubernetes CronJobs, update the container command:
command:
[
"sh",
"-c",
"pg_dump $(DATABASE_URL) && curl -fsS --retry 3 https://ping.cronping.com/<token>",
]Grace period inference
Cronping automatically assigns a grace period based on the job frequency:
| Job frequency | Grace period |
|---|---|
| Less than 5 minutes | 1 min |
| Less than 1 hour | 5 min |
| Less than 1 day | 30 min |
| 1 day or more | 2 hours |
You can adjust the grace period in the preview table before importing, or later in each heartbeat's settings.