Skip to content

Commit 3589866

Browse files
authored
Merge pull request #17 from fermyon/tpmccallum-patch-1
Add cron character explanation and give examples of different schedules
2 parents 28b14ed + bb31c29 commit 3589866

File tree

1 file changed

+37
-3
lines changed

1 file changed

+37
-3
lines changed

README.md

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,19 +48,53 @@ spin build --up
4848

4949
## Trigger Configuration
5050

51-
The trigger type is `cron` and there are no application-level configuration options.
51+
The trigger type is `cron`, and there are no application-level configuration options.
5252

5353
The following options are available to set in the [[trigger.cron]] section:
5454

5555
| Name | Type | Required? | Description |
5656
|-----------------------|------------------|-----------|-------------|
5757
| `component` | string or table | required | The component to run on the schedule given in `cron_expression`. (This is the standard Spin trigger component field.) |
58-
| `cron_expression` | string | required | The `cron` expresison describing the schedule on which to execute the component. |
58+
| `cron_expression` | string | required | The `cron` expression describes the schedule for executing the component. |
59+
60+
### Cron Expression Fields
61+
62+
The `cron_expression` fields are as follows:
63+
64+
```text
65+
# ┌──────────── sec (0–59)
66+
# | ┌───────────── min (0–59)
67+
# | │ ┌───────────── hour (0–23)
68+
# | │ │ ┌───────────── day of month (1–31)
69+
# | │ │ │ ┌───────────── month (1–12)
70+
# | │ │ │ │ ┌───────────── day of week (0–6)
71+
# | │ │ │ │ | ┌─────────────- year
72+
# | │ │ │ │ | │
73+
# | │ │ │ │ | │
74+
* * * * * * *
75+
```
76+
77+
### Cron Expression Characters
78+
79+
The `*` indicates that every value applies. For example, if `sec` is set to `*`, then every second will trigger execution.
80+
The `/` indicates increments. For example, if `sec` is set to `0/15`, then starting at `0`, the trigger will be executed every 15 seconds.
81+
The `,` indicates a list of values. For example, if `sec` is set to `2,8`, then the trigger will execute only on the 2nd and 8th seconds of every minute.
82+
The `-` indicates range. For example, if the `sec` is set to `5-10`, then the trigger will execute only on the 5th, 6th, 7th, 8th, 9th, and 10th seconds of each minute.
83+
The `0` indicates no execution. If the `sec` is set to `0`, then the trigger can only execute on higher field values such as `min`, `hour`, etc. The lowest second increment is 60 (one minute).
84+
85+
Here is one example that combines a few of the fields mentioned above:
86+
87+
```text
88+
sec min hour day of month month day of week year
89+
0 1/2 11,12 5-10 * * *
90+
```
91+
92+
The above schedule of `0 1/2 11,12 5-10 * * *` will execute on the first minute and every subsequent 2 minutes during the 11th hour and the 12 hour (noon) on days 5 through 10 of every month (regardless of the day of the week) and this will repeat through every year.
5993

6094
## Building Cron Components
6195

6296
Currently only a Rust SDK is supported for guest components. The `spin-cron-sdk` along with the [`spin_sdk` crate](https://docs.rs/spin-sdk) can be used to build cron components. The guest code must have a function decorated with the `#[cron_component]` macro. See `guest/src/lib.rs` for an example in rust.
6397

6498
The signature of the function must be `fn handle_cron_event(metadata: Metadata) -> Result<(), Error>`.
6599

66-
The `Metadata` object contains a single field `timestamp` which contains the duration since 00:00:00 UTC on 1 January 1970 (the Unix epoch) in seconds.
100+
The `Metadata` object contains a single field `timestamp` which contains the duration since 00:00:00 UTC on 1 January 1970 (the Unix epoch) in seconds.

0 commit comments

Comments
 (0)