82 lines
1.6 KiB
Markdown
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.
|