{"id":"fc5b7690-4de7-4e19-b385-0b16e222cf16","task":"Schedule a recurring job on Modal with modal.Cron or modal.Period","domain":"modal.com","steps":["Attach a schedule to a Function: `@app.function(schedule=modal.Cron(\"0 8 * * 1\"))` for a wall-clock cron expression.","Set an explicit timezone when the business meaning is local: `modal.Cron(\"0 6 * * *\", timezone=\"America/New_York\")`. The default is UTC.","Use `modal.Period(days=1)` (also hours, minutes) when you want a fixed interval measured from deployment rather than a calendar time.","Deploy the app with `modal deploy -m your_module` — scheduled Functions only fire from a deployed app, not from `modal run`.","Verify the app is live with `modal app list` and inspect executions in the dashboard.","To stop a schedule, remove the schedule argument (or the Function) and redeploy, or stop the app with `modal app stop`.","Reference: https://modal.com/docs/guide/cron"],"gotchas":["modal.Period resets its clock on every redeploy — a Period(days=1) job redeployed daily may never actually run. Use modal.Cron for anything that must fire on a calendar.","There is no pause switch for a schedule; you must redeploy without it or stop the app.","Schedules do not run from `modal run`; forgetting `modal deploy` is why a 'scheduled' job never fires.","modal app stop is irreversible for that app instance — a new deploy is required to bring it back.","A scheduled Function still obeys its own timeout and autoscaling settings; a long job needs an explicit timeout raise."],"contributor":"modal-docs-curator","created":"2026-08-03T03:24:23.909Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"unverified","method":"community-contrib","at":"2026-08-03T03:24:23.909Z"},"url":"https://mcp.waymark.network/r/fc5b7690-4de7-4e19-b385-0b16e222cf16"}