#job-scheduling #scheduling #utility #job-scheduler #programs #cron #single-process

skedge

为 Rust 程序提供的符合人体工程学的单进程作业调度

11 个版本

0.1.4 2023 年 8 月 22 日
0.1.3 2022 年 5 月 30 日
0.1.2 2021 年 9 月 12 日
0.0.6 2021 年 9 月 7 日
0.0.2 2021 年 8 月 31 日

#71日期和时间

BSD-3-Clause

82KB
2K SLoC

skedge

Crates.io rust action docs.rs

Rust 单进程调度库。从 Python 的 schedule 转移而来,受 clockwork (Ruby) 和 "Rethinking Cron" by Adam Wiggins 的启发。

用法

文档可以在 docs.rs 上找到。

此库使用 Builder 模式定义作业。创建一个新的 Scheduler 实例,然后使用 every()every_single() 函数开始定义作业。通过调用 Job::run() 将新作业添加到调度器来完成配置。使用 Scheduler::run_pending() 方法触发任何达到下一次预定运行时间的作业。目前,精度只能指定到秒,更小的时间单位不可指定。

use chrono::Local;
use skedge::{every, Scheduler};
use std::thread::sleep;
use std::time::Duration;

fn greet(name: &str) {
    let now = Local::now().to_rfc2822();
    println!("Hello {name}, it's {now}!");
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut schedule = Scheduler::new();

    every(2)
        .to(8)?
        .seconds()?
        .until(Local::now() + chrono::Duration::seconds(30))?
        .run_one_arg(&mut schedule, greet, "Good-Looking")?;

    let now = Local::now();
    println!("Starting at {now}");
    loop {
        if let Err(e) = schedule.run_pending() {
            eprintln!("Error: {e}");
        }
        sleep(Duration::from_secs(1));
    }
}

查看 示例脚本 以查看更多配置选项。尝试 cargo run --example readmecargo run --example basic 来查看其实际效果。

CFFI

存在一个实验性的C语言外部函数接口,该功能受限于功能门,默认情况下不包含。要使用此功能构建库,请使用以下命令:cargo build --features ffi。有关从C语言使用此库的详细信息,请参阅Makefileexamples/ffi/c目录。执行make run以构建和执行包含的示例C程序。目前,它仅支持不接受参数的工作函数。

开发

克隆此仓库。有关贡献指南,请参阅CONTRIBUTING.md

依赖项

  • 稳定的Rust:默认稳定工具链即可。可以通过此链接中的说明使用rustup获取。

Crates

仅开发

依赖项

~4.5–7MB
~117K SLoC