Skip to Content
FeaturesSchedules

Schedules

Schedules let you run rules on a recurring basis using cron expressions or poll intervals. Combined with schedule guards, you can ensure rules only fire during appropriate windows and pause them instantly with Quick Freeze when needed.

How It Works

When a rule uses a schedule or poll trigger, TinyOps evaluates it at the specified cadence. Before each evaluation, schedule guards are checked. If a guard blocks execution, the run is marked as skipped with a reason logged. Otherwise, the rule evaluates normally.

Cron Expressions

Cron format follows the standard 5-field syntax:

minute hour day month weekday
FieldValuesDescription
minute0-59Minute of the hour
hour0-23Hour of the day (UTC unless timezone configured)
day1-31Day of the month
month1-12Month of the year
weekday0-6Day of the week (0 = Sunday)

Examples

ExpressionMeaning
0 9 * * 1-5Weekdays at 9:00 AM
*/15 * * * *Every 15 minutes
0 0 1 * *First day of every month at midnight
30 17 * * 5Fridays at 5:30 PM
cron-schedule-rule.yaml
name: daily-cost-check trigger: type: schedule cron: "0 9 * * 1-5" provider: vercel condition: field: billing.mtd_spend operator: gte value: 50 action: type: notify channel: slack message: "Vercel spend alert: ${{billing.mtd_spend}} MTD"

Poll Intervals

For simpler recurring checks, use poll intervals instead of cron. Format is a number followed by a unit:

UnitAbbreviationExample
Minutesm5m
Hoursh1h
Daysd1d

The minimum poll interval is 1 minute. Intervals shorter than 1 minute will be rejected.

poll-interval-rule.yaml
name: stale-pr-check trigger: type: poll interval: 1h condition: field: pr.last_activity_days operator: gte value: 7 action: type: notify channel: slack message: "PR #{{pr.number}} is stale"

Schedule Guards

Guards add conditions that must be met before a scheduled rule executes. If a guard blocks, the execution is marked as skipped with the guard name as the reason.

Business Hours Guard

Restricts rule execution to your organization’s configured business hours.

SettingDescription
TimezonePer-organization timezone setting
Start/End timesConfigurable per day of the week
business-hours-guard.yaml
name: cost-alert trigger: type: schedule cron: "0 * * * *" guards: - type: duringBusinessHours

Freeze Window Guard

Blocks rule execution during defined freeze periods. Supports both one-time and recurring windows.

freeze-window-guard.yaml
name: deploy-notify trigger: type: webhook event: push guards: - type: excludeFreezeWindows

Each organization can have a maximum of 50 freeze windows. Remove expired one-time windows to free up slots.

Quick Freeze

Quick Freeze lets you instantly pause all scheduled rules for a specified duration. Useful for incidents, maintenance windows, or when you need immediate quiet.

Open the Schedules page in your dashboard

Click “Quick Freeze”

Select duration (e.g., 15 minutes, 1 hour, 4 hours)

All scheduled rules are paused immediately

Rules resume automatically when the freeze expires

Skipped Executions

When a guard blocks a scheduled execution, TinyOps records it with:

FieldValue
Statusskipped
ReasonGuard name (e.g., duringBusinessHours, excludeFreezeWindows, quickFreeze)
TimestampWhen the execution was attempted

Skipped executions appear in your Dashboard & Analytics and can be filtered by status.