> For the complete documentation index, see [llms.txt](https://osl.mistium.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://osl.mistium.com/standard-library/mathtime/cron.md).

# cron

Use `cron` to register named jobs, run them manually, or keep a scheduler loop checking cron-style schedules.

```osl
import "std:cron"
```

## API reference

### `cron`

| Method                                                 | Returns      | Notes                                                                                            |
| ------------------------------------------------------ | ------------ | ------------------------------------------------------------------------------------------------ |
| `cron.create()`                                        | `*cron.Cron` |                                                                                                  |
| `cron.addJob(name: any, schedule: any, callback: any)` | `boolean`    | Adds job.                                                                                        |
| `cron.removeJob(name: any)`                            | `boolean`    | Removes job.                                                                                     |
| `cron.enableJob(name: any)`                            | `boolean`    | Enables an existing job.                                                                         |
| `cron.disableJob(name: any)`                           | `boolean`    | Disables an existing job through the same synchronized state update.                             |
| `cron.runJob(name: any)`                               | `boolean`    | Runs job.                                                                                        |
| `cron.runAll()`                                        | `object`     | Runs each current job and returns results keyed by job name without intermediate result buffers. |
| `cron.validateSchedule(schedule: any)`                 | `boolean`    | Validates schedule.                                                                              |
| `cron.calculateNextRun(schedule: string)`              | `time.Time`  |                                                                                                  |
| `cron.start()`                                         | `chan any`   | Starts a scheduler loop; concurrent loops claim each due job only once.                          |
| `cron.stop(done: chan any)`                            | `void`       | Stops the resource.                                                                              |
| `cron.checkJobs()`                                     | `void`       |                                                                                                  |
| `cron.getJobs()`                                       | `array`      | Returns job snapshots using the same shape as `getJob`.                                          |
| `cron.getJob(name: any)`                               | `object`     | Returns the named job snapshot as a regular OSL object, or `null` when absent.                   |
| `cron.getJobCount()`                                   | `number`     | Returns job count.                                                                               |
| `cron.isEnabled(name: any)`                            | `boolean`    |                                                                                                  |
| `cron.getLastRun(name: any)`                           | `number`     | Returns the last-run Unix timestamp, or `0` when absent.                                         |
| `cron.getNextRun(name: any)`                           | `number`     | Returns the next-run Unix timestamp, or `0` when absent.                                         |
| `cron.getRunCount(name: any)`                          | `number`     | Returns the completed run count, or `0` when absent.                                             |
| `cron.runOnce()`                                       | `object`     | Runs once.                                                                                       |
| `cron.clear()`                                         | `void`       | Clears all stored values.                                                                        |

## Notes

* Prefer `import "std:cron"`; the older `import "osl/cron"` spelling remains supported.

## Behavior and limits

Schedules accept names, ranges, lists, and steps. Invalid schedules return an error instead of stopping the program. The scheduler will not start a second scheduled run of a job that is still running. Calls to `runJob` are independent and can overlap. Calling `stop` more than once is safe.

`getJob` returns `null` when the named job is absent, including after it removes itself. Check that result before reading job fields.
