> For the complete documentation index, see [llms.txt](https://docs.fortifiedid.se/control/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.fortifiedid.se/control/configuration-reference/modules/schedules.md).

# Schedules

Configure scheduled jobs in Control and connect each job to one or more pipes.

{% hint style="info" %}
**Underlying runtime module:** `Scheduler`
{% endhint %}

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](/control/configuration-reference/modules/schedules/properties.md)
* [Quartz cron examples](/control/configuration-reference/modules/schedules/quartz-cron-examples.md)
* [Pipes](/control/configuration-reference/modules/external-modules.md)
