floo.app.toml and they are synced on every deploy.
Declare in config
Add[cron.<name>] sections to floo.app.toml:
Fields
| Field | Required | Description |
|---|---|---|
schedule | yes | Standard cron expression (e.g. "0 9 * * *" for 9am daily, "*/5 * * * *" for every 5 minutes) |
command | yes | Shell command to execute inside the container |
service | yes | Name of the service whose image to run the command in — must match a [services.*] entry |
timeout | no | Max execution time in seconds (default: 300) |
Deploy and verify
Push to GitHub or runfloo redeploy. Cron jobs are synced on every deploy — new jobs are created, changed jobs are updated, removed jobs are deleted.
Manually trigger a job
Test a job without waiting for its schedule:Common schedule expressions
| Expression | Meaning |
|---|---|
* * * * * | Every minute |
*/5 * * * * | Every 5 minutes |
0 * * * * | Every hour |
0 9 * * * | Daily at 9am UTC |
0 9 * * 1-5 | Weekdays at 9am UTC |
0 0 * * 0 | Weekly on Sunday at midnight UTC |
0 0 1 * * | Monthly on the 1st at midnight UTC |
How it works
- You declare
[cron.<name>]infloo.app.toml - The CLI sends cron definitions to the API during deploy
- The API’s
_sync_cron_jobs()creates, updates, or deletes CronJob records - Jobs run inside the specified service’s container image with the same environment variables
DATABASE_URL, REDIS_URL, and other env vars as the service they run in.