Back to docs
Concepts

Scheduling

Dagy scheduling is backed by `DAGY_SCHEDULES` and evaluated by a scheduler Lambda every minute.

Modes

  • cron: 5-field cron (minute hour day month weekday) in a configured timezone.
  • interval: fixed interval in seconds (interval_seconds).
  • one_time: executes once at one_time_at.
  • manual: no automatic execution; trigger using POST /schedules/{schedule_id}/trigger.

Shared attributes

  • timezone: IANA timezone (default America/New_York for implicit schedules created via deploy).
  • enabled: include/exclude from automated scheduling.
  • start_at / end_at: optional scheduling boundaries.
  • catchup_policy:
    • none: skip backlog and schedule from current time.
    • all: keep advancing from previously due time until backlog is drained.

Implicit schedules via deploy

When deploying a flow with a schedule parameter (via flow.deploy() or dagy deploy --schedule), an implicit cron schedule is automatically created. You can specify the timezone for this schedule:

Python SDK:

flow.deploy(
    name="my-pipeline",
    schedule="0 * * * *",
    timezone="America/Los_Angeles",
)

CLI:

dagy deploy artifact.zip --deployment my-pipeline --schedule "0 * * * *" --timezone "America/Los_Angeles"

If no timezone is provided, it defaults to America/New_York.

Runtime fields

  • next_run_epoch / next_run_at: next due execution.
  • last_triggered_at: most recent scheduler/manual trigger timestamp.
  • last_run_id / last_run_slug: most recent run linkage.
  • last_error: latest scheduler-trigger error.