Skip to content

Cron Jobs

Schedule recurring tasks for any service. Run database cleanups, send reports, sync data, or trigger webhooks on a cron schedule — all managed from the dashboard.

Creating a cron job

  1. Open your service detail page
  2. Go to the Cron Jobs section
  3. Click Create Cron Job
  4. Configure the job:
    • Name — lowercase, alphanumeric, and hyphens only (unique per service)
    • Schedule — choose a preset or enter a cron expression
    • Timezone — IANA timezone (default: UTC)
    • Type — HTTP trigger or shell command
  5. Click Create

The dashboard shows a live preview of the next 3 execution times based on your schedule.

Trigger types

HTTP trigger

Makes an HTTP request to your running service on a schedule. Ideal for Next.js API routes, Express endpoints, or webhook handlers.

  • Method: GET or POST
  • Path: The endpoint to hit (e.g. /api/cron/cleanup)
  • Uses your service’s internal hostname — no authentication needed
POST /api/cron/send-reports

Command trigger

Runs a shell command inside a fresh container using your service’s Docker image. The container gets all of your service’s environment variables.

  • Working directory: /app
  • Stdout/stderr: Captured and stored in run history
Terminal window
node scripts/cleanup.js

Schedule format

Presets

Choose from common intervals without writing cron syntax:

PresetCron expression
Every minute* * * * *
Every 5 minutes*/5 * * * *
Every 15 minutes*/15 * * * *
Every 30 minutes*/30 * * * *
Every hour0 * * * *
Every 6 hours0 */6 * * *
Every 12 hours0 */12 * * *
Daily (midnight)0 0 * * *
Daily at 9 AM0 9 * * *
Weekly (Monday 9 AM)0 9 * * 1
Monthly (1st, midnight)0 0 1 * *

Custom cron expression

Standard 5-field format: minute hour day month weekday

┌───────────── minute (0-59)
│ ┌───────────── hour (0-23)
│ │ ┌───────────── day of month (1-31)
│ │ │ ┌───────────── month (1-12)
│ │ │ │ ┌───────────── day of week (0-6, Sunday=0)
│ │ │ │ │
* * * * *

Advanced options

Expand the Advanced section when creating or editing a cron job:

OptionDefaultRange
Memory256 MB64–4096 MB
CPU0.25 vCPU0.1–4 vCPU
Timeout5 minutes1 second – 1 hour
Overlap policySkipSkip / Buffer One / Allow All

Overlap policies

What happens when a job takes longer than the interval between runs:

  • Skip — don’t trigger if the previous run is still in progress
  • Buffer One — queue one extra execution, skip further triggers
  • Allow All — execute immediately in parallel

Run history

Each cron job shows a list of recent runs with:

  • Status — success, failed, timed out, skipped, or running
  • Duration — how long the execution took
  • Triggered by — schedule, manual, or backfill
  • Error message — stderr output on failure

Click any run to see the full output.

Manual trigger

Click Run Now on any cron job to trigger it immediately, outside of the regular schedule. Manual runs are tracked in the same history with a “manual” badge.

Auto-pause on failure

If a cron job fails repeatedly (consecutive failures), Stackpad automatically pauses it to prevent runaway costs and log noise. The job shows a “Paused by system” badge. Re-enable it from the cron job settings after fixing the issue.

Plan limits

PlanPer servicePer projectMinimum intervalMax timeout
Starter2515 minutes5 minutes
Pro10251 minute30 minutes
Business251001 minute1 hour
EnterpriseUnlimitedUnlimited1 minute1 hour

Availability

Cron jobs are available for web and service types only. They cannot be created for databases, caches, GPU services, or object storage.

What’s next?