# rcron
a simple cron-like job scheduling library for Rust
## Usage
Be sure to add the rcron crate to your `Cargo.toml`:
```toml
[dependencies]
rcron = "1.2.4"
```
Creating a schedule for a job is done using the `FromStr` impl for the
`Schedule` type of the [cron](https://github.com/zslayton/cron) library.
The scheduling format is as follows:
```text
sec min hour day of month month day of week year
* * * * * * *
```
Time is for `Local` your local timezone.
Comma separated values such as `5,8,10` represent more than one time value. So
for example, a schedule of `0 2,14,26 * * * *` would execute on the 2nd, 14th,
and 26th minute of every hour.
Ranges can be specified with a dash. A schedule of `0 0 * 5-10 * *` would
execute once per hour but only on day 5 through 10 of the month.
Day of the week can be specified as an abbreviation or the full name. A
schedule of `0 0 6 * * Sun,Sat` would execute at 6am on Sunday and Saturday.
A simple usage example:
```rust
use rcron::{JobScheduler, Job};
use std::time::Duration;
fn main() {
let mut sched = JobScheduler::new();
sched.add(Job::new("1/10 * * * * *".parse().unwrap(), || {
println!("exec task every 10 seconds!");
}));
sched.add(Job::new("1/5 * * * * *".parse().unwrap(), || {
println!("exec task every 5 seconds!");
}));
loop {
sched.tick();
std::thread::sleep(Duration::from_millis(500));
// Or use the following method.
// The `time_till_next_job` method returns the duration till the next job is supposed to run.
// std::thread::sleep(sched.time_till_next_job());
}
}
```
# example
```shell
cargo run --package rcron --example rcron_basic
Finished dev [unoptimized + debuginfo] target(s) in 0.09s
Running `target/debug/examples/rcron_basic`
exec task every 10 seconds!
exec task every 5 seconds!
exec task every 5 seconds!
exec task every 10 seconds!
exec task every 5 seconds!
exec task every 5 seconds!
exec task every 10 seconds!
exec task every 5 seconds!
exec task every 5 seconds!
```
## Similar Libraries
* [cron](https://github.com/zslayton/cron) the cron expression parser we use.
* [schedule-rs](https://github.com/mehcode/schedule-rs) is a similar rust library that implements it's own cron expression parser.
* [tokio-cron-scheduler](https://github.com/mvniekerk/tokio-cron-scheduler) Schedule tasks on Tokio using cron-like annotation.
# refer
- https://github.com/lholden/job_scheduler
- https://github.com/mvniekerk/tokio-cron-scheduler
## License
rcron is licensed under either of
* MIT license