# Schedules

Documentation owner: product `control`; documentation version: `1.3.0`.
Source: `content/products/control/1.3.0/configuration-reference/modules/schedules/README.md` at commit `eaf7a020437971baeee95e87eaf963636040ac71`.

:::note
**Underlying runtime module:** `Scheduler`
:::

Schedules let Control execute work without an interactive Forms session. A schedule is a job definition loaded by the Scheduler module, and a job can execute one or more Pipes according to a fixed interval or a Quartz cron expression.

Use schedules when you want to:

* run background jobs on a recurring schedule
* execute one or more pipes without user interaction
* trigger maintenance, synchronization, or integration work at specific times
* run jobs automatically when the service starts

## Runtime structure

In runtime configuration, the Scheduler module loads its jobs from:

```json
{
  "name": "Scheduler",
  "config": {
    "jobs": "@include_as_array:schedules/*/schedule.json"
  }
}
```

Each schedule is stored in its own directory:

```
config/modules/schedules/<id>/
  schedule.json
  pipes/
```

The job definition is stored in `schedule.json`. Pipes referenced by the schedule are stored in `pipes/` and are loaded by the shared Pipes module.

## How schedule execution works

1. The Scheduler module loads all `schedule.json` files.
2. If `enabled` is `false`, the Scheduler does not register or run the job.
3. The schedule's `type` determines what kind of job is executed.
4. For `Pipes` jobs, the pipe ids in `params.pipes` are executed.
5. If multiple pipes are configured, they can be run sequentially or in parallel.
6. If `run_on_start` is enabled, the job is also executed when the service starts.

## Configuration in Control management

Schedules are managed through the Control management product. The UI lets you:

* create and delete schedules
* enable or disable a schedule without removing its configuration
* organize schedules with optional categories
* choose a predefined interval or enter a custom Quartz cron expression
* add, edit, and delete schedule pipes
* choose whether multiple pipes should run in parallel

## Related documentation

* [Properties](/products/control/configuration-reference/modules/schedules/properties/)
* [Quartz cron examples](/products/control/configuration-reference/modules/schedules/quartz-cron-examples/)
* [Pipes](/products/control/configuration-reference/modules/external-modules/)
