cronping

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

FormatSource
CrontabOutput of crontab -l, crontab files, /etc/cron.d/*
Kubernetes YAMLCronJob 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    # Linux

What 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= or CRON_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.sh

This creates 4 heartbeats with America/Sao_Paulo timezone:

NameScheduleGrace
backup.sh0 2 * * *30 min
stripe-sync.py*/15 * * * *5 min
cleanup.sh0 3 * * 030 min
run.sh0 8 * * 1-530 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 name
  • spec.schedule — the cron expression
  • spec.timeZone — timezone (Kubernetes 1.27+)
  • metadata.namespace and metadata.labels — auto-generated tags (prefixed with k8s)

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:

NameScheduleTimezoneTags
database-backup0 2 * * *America/Sao_Paulok8s production myapp backend
stripe-sync*/15 * * * *UTCk8s 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 frequencyGrace period
Less than 5 minutes1 min
Less than 1 hour5 min
Less than 1 day30 min
1 day or more2 hours

You can adjust the grace period in the preview table before importing, or later in each heartbeat's settings.

On this page