Crons
A cron is a schedule that fires a target on a recurring cron expression. The cron itself is just the trigger - it owns the schedule, timezone, and a pointer to what runs. The target keeps its own identity, so deleting a cron never touches the function or job it fired, and one function or job can be driven by several crons.
Creating a cron
- Go to Crons -> New Cron.
- Choose whether it runs a Function or a Job, and pick the target.
- Set a 5-field cron expression and a timezone (the presets help if you're unsure of the syntax).
- Save. The cron shows its next run time and, after it fires, a run history with logs.
Cron expressions
orkestr uses standard 5-field cron syntax, evaluated in the timezone you choose and stored internally in UTC. A few examples:
┌── minute (0-59)
│ ┌── hour (0-23)
│ │ ┌── day of month (1-31)
│ │ │ ┌── month (1-12)
│ │ │ │ ┌── day of week (0-6, Sun=0)
│ │ │ │ │
0 2 * * * # every day at 02:00
*/15 * * * * # every 15 minutes
0 9 * * 1 # every Monday at 09:00
0 0 1 * * # midnight on the 1st of each monthTargets
- Function - makes an HTTP request to a deployed function. You can set the method, path, and an optional request body.
- Job - dispatches a job run (a one-off command in a project image). The cron records that it fired; the job's exit code and logs live in the job's own run history.
Schedules and plan limits
The minimum interval between runs depends on your plan, which keeps scheduled load predictable:
- Starter: daily.
- Pro: as frequent as every 5 minutes.
- Team: down to every minute.
If an expression would fire more often than your plan allows, the cron is rejected at save time with a clear message.
Overlap policy
If a run is still in progress when the next one is due, the overlap policy decides what happens:
- Skip (default) - don't start a new run while one is in flight. Best for jobs that shouldn't run concurrently, like migrations.
- Allow - fire regardless. Fine for idempotent, short tasks.
Run history and reliability
- Each cron keeps its most recent runs with status, timing, response code (for functions), and logs.
- Firing is idempotent - a given scheduled slot runs at most once, even across scheduler restarts.
- Missed runs are not backfilled: after an outage the cron fires once and advances to the next slot, rather than replaying a backlog.
- You can pause and resume a cron at any time, or trigger an immediate run with Run now.
FAQ
What timezone do schedules use?
The one you pick when creating the cron. Internally everything is normalized to UTC, so daylight-saving shifts are handled by the timezone you chose.
Can one job have multiple schedules?
Yes. Create several crons pointing at the same job (for example a frequent light run and a nightly heavy run).
What happens if my function returns an error?
The run is recorded as failed with the HTTP status and response body, so you can see what went wrong. The schedule keeps running.
Does a cron run count against function invocation limits?
A cron that targets a function invokes it like any other caller, so it uses the same execution path.