> ## Documentation Index
> Fetch the complete documentation index at: https://docs.zwiron.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Pipeline Scheduling

> Schedule Zwiron pipelines with preset intervals or custom cron for continuous warehouse freshness.

Every Zwiron pipeline runs on a schedule. You can choose from preset intervals or define a custom cron expression.

***

## Schedule options

| Schedule         | Description                         | Best for                                              |
| ---------------- | ----------------------------------- | ----------------------------------------------------- |
| Every 15 minutes | Runs 4× per hour                    | High-frequency incremental syncs                      |
| Every 30 minutes | Runs 2× per hour                    | Operational tables with moderate latency requirements |
| Every hour       | Runs 24× per day                    | Standard incremental syncs                            |
| Every 6 hours    | Runs 4× per day                     | Reporting tables                                      |
| Every 12 hours   | Runs 2× per day                     | Daily-ish syncs with a mid-day refresh                |
| Daily            | Once per day (at a time you choose) | Full refreshes, large tables                          |
| Weekly           | Once per week                       | Rarely-changing reference data                        |
| Custom cron      | Any cron expression                 | Precise scheduling needs                              |

<Info>CDC jobs don't use a schedule — they run continuously and stream changes as they happen. Scheduling only applies to Full Refresh and Incremental jobs.</Info>

***

## Custom cron expressions

Use a standard 5-field cron expression:

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

**Examples:**

| Cron           | Meaning                          |
| -------------- | -------------------------------- |
| `0 * * * *`    | Every hour, on the hour          |
| `0 2 * * *`    | Every day at 2:00 AM             |
| `0 2 * * 1`    | Every Monday at 2:00 AM          |
| `*/30 * * * *` | Every 30 minutes                 |
| `0 6,18 * * *` | At 6 AM and 6 PM every day       |
| `0 2 1 * *`    | First day of every month at 2 AM |

All times are in **UTC**.

***

## Manual runs

You can trigger a job to run immediately at any time — regardless of the schedule — by clicking **Run Now** on the job page. This doesn't affect the next scheduled run.

***

## Pausing a job

Pause a job to stop scheduled runs without deleting the pipeline. Useful when:

* Your source database is undergoing maintenance
* You want to temporarily stop syncing
* You're debugging an issue

Click **Pause** on the job page. The job will not run again until you click **Resume**.

***

## Timezone note

All schedules run in **UTC**. If you want a job to run at 2 AM in your local timezone, convert to UTC when entering the cron expression. For example, to run at 2 AM EST (UTC-5):

```
0 7 * * *   (7 AM UTC = 2 AM EST)
```

***

## What happens if a run is missed?

If a scheduled run is missed (e.g. because the agent was offline), Zwiron will run it once when the agent comes back online — it won't run multiple catch-up runs. This prevents cascading load on your database if the agent was down for a long time.

***

## Concurrency

By default, only one instance of a job runs at a time. If a run takes longer than the schedule interval (e.g. the job takes 2 hours but is scheduled every hour), the next run will be skipped until the current run completes.
