109 个版本 (52 个重大变更)
0.59.0 | 2024年7月27日 |
---|---|
0.57.0 | 2024年2月1日 |
0.55.0 | 2023年11月13日 |
0.53.0 | 2023年2月8日 |
0.13.6 | 2020年7月2日 |
在 操作系统 中排名 #188
每月下载量 229 次
用于 lightspeed
43KB
899 行
lightspeed-scheduler
用于周期性作业的进程内调度器。Schedule 允许您按照 cron 类似的计划运行 Rust 函数。
使用方法
use std::time::Duration;
use lightspeed_scheduler::{job::Job, scheduler::{Scheduler, TryToScheduler}, JobExecutor};
#[tokio::main]
async fn main() {
let executor = JobExecutor::new_with_utc_tz();
// Run every 10 seconds with no retries in case of failure
let retries = None;
executor
.add_job_with_scheduler(
Scheduler::Interval {
interval_duration: Duration::from_secs(10),
execute_at_startup: true,
},
Job::new("hello_job", "job_1", retries, move || {
Box::pin(async move {
println!("Hello from job. This happens every 10 seconds!");
Ok(())
})
}),
)
.await;
// Run every day at 2:00 am with two retries in case of failure
let retries = Some(2);
executor
.add_job_with_scheduler(
"0 0 2 * * *".to_scheduler().unwrap(),
Job::new("hello_job", "job_2", retries, move || {
Box::pin(async move {
println!("Hello from job. This happens every day at 2 am!");
Ok(())
})
}),
)
.await;
// Start the job executor
let _executor_handle = executor.run().await.expect("The job executor should run!");
// Wait for a signal to stop the job executor
tokio::signal::ctrl_c().await.unwrap();
// Stop the job executor
let stop_gracefully = true;
executor.stop(stop_gracefully).await.expect("The job executor should stop!");
}
cron 调度格式
使用 cron 库的 FromStr
实现,为 Schedule
类型创建作业的调度。
调度格式如下
sec min hour day of month month day of week year
* * * * * * *
时间指定为 UTC
而不是本地时区。注意年份可能被省略。
逗号分隔的值,如 5,8,10
代表多个时间值。因此,例如,一个调度为 0 2,14,26 * * * *
将在每个小时的第 2 分钟、第 14 分钟和第 26 分钟执行。
可以使用破折号指定范围。一个调度为 0 0 * 5-10 * *
将每小时执行一次,但仅在月份的 5 日至 10 日期间。
可以指定星期的缩写或全名。一个调度为 0 0 6 * * Sun,Sat
将在星期天和星期六的早上 6 点执行。
致谢
依赖项
~5–12MB
~108K SLoC