Monitor Types & Schedules
Saturn supports multiple scheduling methods to match your job's configuration.
Monitor Types
Interval-Based
Monitor expects a ping every N seconds.
Best for:
- Simple recurring jobs
 - Jobs that run at fixed intervals
 - When cron expressions feel like overkill
 
Example: Ping every 3600 seconds (1 hour)
# Create in dashboard or via API
{
  "name": "Hourly Health Check",
  "schedule": {
    "type": "interval",
    "seconds": 3600
  },
  "gracePeriod": 300  // 5 minutes grace
}
Common Intervals:
| Interval | Seconds | Use Case | 
|---|---|---|
| 5 minutes | 300 | Health checks | 
| 15 minutes | 900 | Cache updates | 
| 1 hour | 3600 | Cleanup tasks | 
| 6 hours | 21600 | Report generation | 
| 1 day | 86400 | Daily backups | 
Cron-Based
Monitor expects a ping based on a cron expression.
Best for:
- Complex schedules (e.g., "weekdays at 3 AM")
 - Matching existing crontab entries
 - Timezone-specific schedules
 
Example: Daily at 3 AM
{
  "name": "Nightly Backup",
  "schedule": {
    "type": "cron",
    "expression": "0 3 * * *",
    "timezone": "America/New_York"
  },
  "gracePeriod": 1800  // 30 minutes grace
}
Cron Expression Syntax
Saturn uses standard cron syntax with optional seconds field:
┌────────── second (optional, 0-59)
│ ┌──────── minute (0-59)
│ │ ┌────── hour (0-23)
│ │ │ ┌──── day of month (1-31)
│ │ │ │ ┌── month (1-12 or JAN-DEC)
│ │ │ │ │ ┌ day of week (0-7 or SUN-SAT, 0 and 7 are Sunday)
│ │ │ │ │ │
* * * * * *
Common Patterns
# Every day at 3 AM
0 3 * * *
# Every hour
0 * * * *
# Every 15 minutes
*/15 * * * *
# Every Monday at 9 AM
0 9 * * 1
# First day of every month at midnight
0 0 1 * *
# Weekdays at 6 AM
0 6 * * 1-5
# Every 6 hours
0 */6 * * *
# Twice a day (6 AM and 6 PM)
0 6,18 * * *
Advanced Expressions
# Business hours only (9 AM - 5 PM, weekdays)
0 9-17 * * 1-5
# Last day of month (approximation)
0 0 28-31 * *
# Every quarter (Jan, Apr, Jul, Oct)
0 0 1 1,4,7,10 *
# With seconds: Every 30 seconds
*/30 * * * * *
Use an online cron expression tester to validate your schedules before creating monitors. Try crontab.guru or crontab-generator.org.
Timezone Support
By default, cron expressions use UTC. Specify a timezone to match your server's configuration:
Supported Timezones
Use IANA timezone names:
# North America
America/New_York        # EST/EDT
America/Chicago         # CST/CDT
America/Denver          # MST/MDT
America/Los_Angeles     # PST/PDT
# Europe
Europe/London           # GMT/BST
Europe/Paris            # CET/CEST
Europe/Berlin           # CET/CEST
# Asia
Asia/Tokyo              # JST
Asia/Shanghai           # CST
Asia/Kolkata            # IST
# Pacific
Australia/Sydney        # AEDT/AEST
Pacific/Auckland        # NZDT/NZST
Full list: IANA Time Zone Database
Example with Timezone
{
  "name": "Tokyo Morning Backup",
  "schedule": {
    "type": "cron",
    "expression": "0 3 * * *",
    "timezone": "Asia/Tokyo"
  }
}
This runs at 3 AM Japan Standard Time, not UTC.
Daylight Saving Time
Saturn automatically handles DST transitions:
- Spring forward: Job runs once (skips the lost hour)
 - Fall back: Job runs once (doesn't duplicate)
 
Kubernetes CronJobs only support timezone in v1.25+. For older versions, use UTC and adjust your expression.
Manual Pings
For jobs without a fixed schedule:
{
  "name": "On-Demand Task",
  "schedule": {
    "type": "manual"
  }
}
Manual monitors:
- Never go "MISSED" or "LATE"
 - Only alert on explicit FAIL pings
 - Useful for webhooks, event-driven jobs, or ad-hoc tasks
 
Choosing the Right Type
| Scenario | Recommended Type | Example | 
|---|---|---|
| Runs every N seconds/minutes | Interval | Health checks every 5 min | 
| Matches a crontab entry | Cron | 0 3 * * * daily backup | 
| Complex schedule with TZ | Cron + Timezone | Weekdays 9 AM EST | 
| Event-driven / no fixed schedule | Manual | Webhook receiver | 
| Varies by environment | Interval (simpler) | Dev: 1 hr, Prod: 15 min | 
Grace Periods
Every monitor has a grace period — the extra time allowed before marking a job as LATE or MISSED.
Recommended Grace Periods
| Job Duration | Grace Period | Reason | 
|---|---|---|
| < 1 minute | 1-2 minutes | Quick alert on failure | 
| 1-5 minutes | 2-5 minutes | Account for small delays | 
| 5-30 minutes | 5-10 minutes | Network/load variance | 
| 30-60 minutes | 10-30 minutes | Generous for reliability | 
| > 1 hour | 15-30% of duration | Avoid false positives | 
See Grace Periods for detailed guidance.
Updating Schedules
You can change a monitor's schedule anytime:
- Interval → Cron: Switches to cron-based expectations
 - Cron → Interval: Calculates next expected interval
 - Timezone changes: Applies immediately to future runs
 
Changing the schedule does not reset statistical baselines (mean, stddev, etc.). Historical data remains for anomaly detection.
Next Steps
Learn more about:
- Pings — How to send start/success/fail pings
 - Grace Periods — Tuning grace periods to avoid false positives
 - Tokens & RBAC — Managing access and permissions