toes/docs/CRON.md
2026-02-01 23:00:49 -08:00

82 lines
1.6 KiB
Markdown

# Cron
A cron job is a TypeScript file that runs on a schedule.
The cron tool discovers jobs from all apps and runs them automatically.
## creating a cron job
Add a file to `cron/` in any app:
```ts
// apps/my-app/current/cron/daily-cleanup.ts
export const schedule = "day"
export default async function() {
console.log("Running cleanup...")
}
```
That's it. The cron tool picks it up within 60 seconds.
## schedules
| value | when |
|-------|------|
| `1 minute` | every minute |
| `5 minutes` | every 5 minutes |
| `15 minutes` | every 15 minutes |
| `30 minutes` | every 30 minutes |
| `hour` | top of every hour |
| `noon` | 12:00 daily |
| `midnight` / `day` | 00:00 daily |
| `week` / `sunday` | 00:00 Sunday |
| `monday` - `saturday` | 00:00 that day |
Alternate forms work too: `"30minutes"`, `30`, `"30 minutes"`.
## environment
Jobs run with the app's working directory and inherit all env vars.
- `APPS_DIR` - path to `/apps` directory
## ui
The cron tool shows:
- Job name (`app/job`)
- Schedule
- Last run time
- Next run time
- Run Now button
Click **New Job** to create one from the UI.
## manual runs
Hit the **Run Now** button or POST to the tool:
```bash
curl -X POST http://localhost:3001/run/my-app/daily-cleanup
```
## job state
Jobs track:
- `idle` / `running` / `disabled`
- Last run timestamp
- Last duration
- Last exit code
- Last error (if any)
- Next scheduled run
## discovery
The cron tool:
1. Scans `APPS_DIR/*/current/cron/*.ts`
2. Imports each file to read `schedule`
3. Validates the schedule
4. Registers with croner
Re-scans every 60 seconds to pick up new/changed/removed jobs.