Docs/Agent/Scheduling

Scheduling Reference

Configure automated captures using cron schedules in pod and namespace annotations.


Annotation Format

Schedules are defined in the reel.io/schedule annotation using pipe-separated cron expressions and commands. Both standard 5-field cron and shorthand descriptors are supported. The next keyword chains a command after the one above it (see Command Chaining below).

# Format: <cron> | <command>
reel.io/schedule: |
@every 1h | upload sbom --scanners vuln
next | upload cbom
@every 1h | create layer
next | upload layer
@daily | delete checkpoint --older-than 7d

Cron Syntax

Standard 5-field cron expressions:

┌───────────── minute (0-59)
│ ┌─────────── hour (0-23)
│ │ ┌───────── day of month (1-31)
│ │ │ ┌─────── month (1-12)
│ │ │ │ ┌───── day of week (0-6, Sun=0)
* * * * *
ExpressionSchedule
0 * * * *Every hour
0 6 * * *Daily at 6 AM
*/15 * * * *Every 15 minutes
0 2 * * 1-5Weekdays at 2 AM
0 3 * * 0Weekly on Sunday at 3 AM

Shorthand descriptors:

ShorthandEquivalent
@hourly0 * * * *
@daily / @midnight0 0 * * *
@weekly0 0 * * 0
@monthly0 0 1 * *
@yearly / @annually0 0 1 1 *
@every 1hEvery hour (interval-based)
@every 30mEvery 30 minutes (interval-based)

Command Chaining

Use the next keyword to chain commands. A next command runs after its parent completes successfully.

# Create layer, then upload it to S3
0 * * * * | create layer
next | upload layer

Supported Commands

CommandDescription
create checkpointCRIU process state snapshot
create layerFilesystem diff capture
create frameCheckpoint + layer archive
upload sbomVulnerability scan (Trivy), uploaded to S3
upload cbomCryptographic inventory, uploaded to S3
upload malwareAntivirus scan (ClamAV), uploaded to S3
upload volatileRuntime state snapshot, uploaded to S3
upload memoryMemory dump (ELF core), uploaded to S3
upload checkpointEphemeral checkpoint, uploaded to S3
upload layerEphemeral layer, uploaded to S3
upload frameEphemeral frame, uploaded to S3
delete checkpointCleanup with retention (--older-than, --filter)
delete layerCleanup by ID
delete frameCleanup by ID

Priority & Scope

Schedules can be set at pod or namespace level. When settings collide, the most specific wins: CLI flags > pod annotations > namespace annotations. This same precedence governs S3 settings.

LevelScopePriority
Pod annotationSingle podHighest
Namespace annotationAll pods in namespaceLower

Opt out individual pods with reel.io/exclude: "true".

Concurrency Limits

The agent caps concurrent operations so captures don't starve the node:

SettingDefaultHelm Value
Max concurrent checkpoints3scheduler.maxConcurrentCheckpoints
Max concurrent layers2scheduler.maxConcurrentLayers
Operation timeout5 minscheduler.operationTimeoutMinutes