Skip to main content
Cron jobs run shell commands on a schedule inside your service’s container image. Declare them in floo.app.toml and they are synced on every deploy.

Declare in config

Add [cron.<name>] sections to floo.app.toml:

Fields

Deploy and verify

Push to GitHub or run floo redeploy. Cron jobs are synced on every deploy, new jobs are created, changed jobs are updated, removed jobs are deleted.
After deploy, verify your jobs:

Manually trigger a job

Test a job without waiting for its schedule:

Common schedule expressions

How it works

  1. You declare [cron.<name>] in floo.app.toml
  2. The CLI sends cron definitions to the API during deploy
  3. floo creates, updates, or deletes cron job records to match the declarations
  4. Jobs run inside the specified service’s container image with the same environment variables
Cron jobs have access to the same DATABASE_URL, REDIS_URL, and other env vars as the service they run in.

Failure handling

Cron jobs do not retry. Each scheduled run executes once; if the command exits non-zero or exceeds its timeout, that run is marked failed. The next scheduled run is the only recovery; there is no retry or backoff. For runs where a miss matters, make the command idempotent and handle retries inside it, and alert on failure: floo logs query --app my-app --cron <job> shows the cron output with [cron:<job>] attribution, and agent webhooks can route repeated failures to your agent or on-call.

Agent workflow

CLI Reference

See the exact floo cron list and floo cron run flags, JSON shape, and --preflight behavior.