Files
antigravity-skills-reference/skills/dbos-python/references/pattern-scheduled.md
Max dml 7e5abd504f feat: add DBOS skills for TypeScript, Python, and Go (#94)
Add three DBOS SDK skills with reference documentation for building
reliable, fault-tolerant applications with durable workflows.

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-17 23:26:51 +01:00

57 lines
1.5 KiB
Markdown

---
title: Create Scheduled Workflows
impact: MEDIUM
impactDescription: Run workflows exactly once per time interval
tags: scheduled, cron, recurring, timer
---
## Create Scheduled Workflows
Use `@DBOS.scheduled` to run workflows on a schedule. Workflows run exactly once per interval.
**Incorrect (manual scheduling):**
```python
# Don't use external cron or manual timers
import schedule
schedule.every(1).minute.do(my_task)
```
**Correct (DBOS scheduled workflow):**
```python
@DBOS.scheduled("* * * * *") # Every minute
@DBOS.workflow()
def run_every_minute(scheduled_time, actual_time):
print(f"Running at {scheduled_time}")
do_maintenance_task()
@DBOS.scheduled("0 */6 * * *") # Every 6 hours
@DBOS.workflow()
def periodic_cleanup(scheduled_time, actual_time):
cleanup_old_records()
```
Scheduled workflow requirements:
- Must have `@DBOS.scheduled` decorator with crontab syntax
- Must accept two arguments: `scheduled_time` and `actual_time` (both `datetime`)
- Main thread must stay alive for scheduled workflows
For apps with only scheduled workflows (no HTTP server):
```python
import threading
if __name__ == "__main__":
DBOS.launch()
threading.Event().wait() # Block forever
```
Crontab format: `minute hour day month weekday`
- `* * * * *` = every minute
- `0 * * * *` = every hour
- `0 0 * * *` = daily at midnight
- `0 0 * * 0` = weekly on Sunday
Reference: [Scheduled Workflows](https://docs.dbos.dev/python/tutorials/scheduled-workflows)