Schedules
Schedules automate recurring scans on a configurable cadence. Each schedule runs one or more scan templates (or template groups) at a specified time — or continuously, with no clock at all: each run starts as soon as the previous one has finished. Every schedule gets a fixed random offset when it is created, so schedules sharing a time do not all start at once. Schedules can be enabled, disabled, or triggered manually with "Run Now".
Inputs
| Name | Description | Allowed values | Default |
|---|---|---|---|
Name | Unique label for this schedule | Non-empty string | — |
Description | Optional free-text note about this schedule | Any text, max 10,000 characters | Empty |
Schedule Type | How often the schedule fires. Continuous has no clock: the next run starts as soon as the previous one finishes. | hourly, daily, weekly, monthly, cron, or continuous | daily |
Timezone | Timezone for interpreting schedule times | Valid IANA timezone | UTC |
Fields & columns
| Name | Description |
|---|---|
Name | Schedule label, links to the edit form |
Description | Optional note about the schedule |
Schedule | Human-readable description of the cadence (e.g., "Daily at 02:00 UTC") |
Templates | Count of scan templates and template groups assigned to this schedule |
Next Run | Relative time until the next scheduled execution (hidden when disabled) |
Last Run | Relative time since the last execution |
Status | Enabled (green) or disabled (gray). Disabled schedules do not fire automatically. |
How to
Create a Recurring Scan
- Click "Add Schedule" and fill in the name and schedule type.
- Select one or more scan templates or template groups to run.
- Save the schedule — it will be enabled by default.
Gotchas
- Row actions live behind one "Actions" button per row. It opens a side panel that lists Enable or Disable, Run Now, Edit and Delete with a sentence on what each does; Delete is marked as destructive. Choosing one opens the same confirmation as before.
- Each schedule gets a fixed random offset of 0–59 minutes when it is created; every run starts at the configured time plus that offset, so the actual start differs from the scheduled time. The offset is not an input and cannot be changed — the edit form shows the assigned value.
- Disabled schedules can still be triggered manually via "Run Now".
- "Run Now" creates scans for all configured templates immediately, regardless of the schedule.
- Cron expressions follow standard 5-field syntax (minute hour day-of-month month day-of-week). Example: '0 2 * * 1' runs at 02:00 every Monday.
- A Continuous schedule runs back-to-back: as soon as every scan from the previous run has finished (completed, failed or cancelled), the next run starts within one dispatcher poll. It never starts a new run sooner than one minute after the previous one started (or the schedule's jitter, if larger), so a template that fails instantly cannot hot-loop. One run is in flight per schedule at a time. Disabling the schedule stops the chain at the next boundary — the run that is already in progress is not cancelled. Next Run reads "when the current run finishes".
API calls (8)
| Method | Path | Description |
|---|---|---|
| GET | /api/scans/schedules | List all schedules |
| POST | /api/scans/schedules | Create a new schedule |
| GET | /api/scans/schedules/:id | Get schedule details |
| PUT | /api/scans/schedules/:id | Update a schedule |
| POST | /api/scans/schedules/:id/enable | Enable a schedule |
| POST | /api/scans/schedules/:id/disable | Disable a schedule |
| POST | /api/scans/schedules/:id/run-now | Trigger a schedule immediately |
| DELETE | /api/scans/schedules/:id | Delete a schedule |
Related
- Run Scan — Manually trigger scans instead of waiting for a schedule
- Recent Scans — Scheduled scans appear on the Recent Scans page when they fire
- Scan Templates — Templates define what each scheduled scan actually does