Skip to content
Hoody.com

Cron-as-a-service. Hoody Cron wraps the system crontab in a REST API with managed entries, enable/disable toggles, auto-expiration, and per-user isolation. Standard 5-field cron expressions plus macros like @hourly and @daily.

  • Managed Entries - Create, update, delete cron jobs via JSON API with UUIDs
  • Enable/Disable - Toggle jobs on and off without deleting them
  • Auto-Expiration - Set expires_at for temporary jobs that clean themselves up
  • Per-User Isolation - Each system user has their own crontab
  • Raw Crontab - Read and write the full crontab file directly
  • Standard Cron - 5-field expressions (* * * * *) plus macros (@hourly, @daily, @weekly, @monthly, @yearly)
  • Comments & Metadata - Attach human-readable comments to managed entries

All endpoints accessed relative to your Cron service URL:

https://PROJECT_ID-CONTAINER_ID-cron-1.SERVER.containers.hoody.com

Managed Entries:

Raw Crontab:

System:

Terminal window
# Create a cron job that runs daily at 9 AM
hoody cron entries create root \
--schedule "0 9 * * *" \
--command "/usr/local/bin/backup.sh" \
--comment "Daily backup at 9 AM" \
-c <container-id>
# List all cron entries
hoody cron entries list root -c <container-id>
# Update a job's schedule
hoody cron entries update root $ENTRY_ID \
--schedule "0 12 * * *" \
-c <container-id>
# View the raw crontab
hoody cron crontabs get root -c <container-id>

Standard 5-field cron expressions:

┌───────────── minute (0-59)
│ ┌───────────── hour (0-23)
│ │ ┌───────────── day of month (1-31)
│ │ │ ┌───────────── month (1-12)
│ │ │ │ ┌───────────── day of week (0-7, Sun is 0 or 7)
│ │ │ │ │
* * * * *

Common patterns:

ScheduleExpression
Every minute* * * * *
Every hour0 * * * *
Every day at midnight0 0 * * *
Weekdays at 9 AM0 9 * * 1-5
Every Sunday at 3 AM0 3 * * 0
First day of month0 0 1 * *

Macros: @yearly, @monthly, @weekly, @daily, @hourly

Set expires_at on managed entries for temporary jobs that automatically remove themselves:

Terminal window
hoody cron entries create root \
--schedule "*/5 * * * *" \
--command "curl -s http://localhost:8080/health >> /var/log/health.log" \
--comment "Temporary health monitoring, auto-expires" \
--expires-at "2026-12-31T00:00:00Z" \
-c <container-id>

expires_at is RFC3339 and must be in the future: the API rejects a timestamp that has already passed.

For full control, read and write the raw crontab directly:

Read the current crontab, then replace it wholesale:

Terminal window
# Read
hoody cron crontabs get root -c <container-id>
# Replace
hoody cron crontabs replace root \
--crontab $'# Custom crontab\n0 * * * * /usr/local/bin/hourly-task.sh\n0 0 * * * /usr/local/bin/daily-task.sh' \
-c <container-id>
  • Scheduled backups - Run backup scripts at regular intervals
  • Data processing - ETL jobs, report generation, log rotation
  • Health monitoring - Periodic health checks with auto-expiring entries
  • Temporary tasks - Time-limited monitoring or data collection
  • Maintenance - Cache cleanup, database optimization, certificate renewal