#cron-job #job-scheduler #cron #scheduler #task-scheduling #task #job

croner-scheduler

适用于 Rust 的线程化 cron 作业调度库

3 个版本

0.0.12 2023 年 12 月 21 日
0.0.11 2023 年 12 月 9 日
0.0.10 2023 年 12 月 5 日

#247日期和时间

每月 22 次下载

MIT 许可证

14KB
260 代码行

Croner Scheduler

Croner Scheduler 是一个专注于基于 cron 模式调度任务的独立 Rust 库。该库是 Croner 项目的独立部分,旨在为希望使用熟悉的 cron 语法进行轻量级高效线程化任务调度的开发者提供工具。

有关 cron 模式解析和评估的更多信息,请参阅 Croner crate。

功能

  • 根据 cron 模式在单独的线程中调度任务,实现并发任务执行。
  • 强大的错误处理。
  • 具有暂停、恢复或停止已计划任务的能力来控制执行流程。
  • 内存中操作,无需持久存储或配置文件。
  • 高度优化的查找未来/过去匹配的方法。
  • 除了 croner 之外没有依赖项。

入门指南

先决条件

确保您已在计算机上安装 Rust。如果没有,您可以从 官方 Rust 网站 获取。

安装

croner-schedulercronerchrono 添加到您的 Cargo.toml 依赖项中

[dependencies]
croner-scheduler = "0.0.12"
croner = "2.0.3"
chrono = "0.4.31"

用法

以下是一个快速示例,用于开始调度任务

use chrono::Local;
use croner_scheduler::{CronScheduler, SchedulerResult};
use croner::Cron;
use std::thread;

fn main() {
    // Schedule a task at even seconds
    let cron: Cron = "0/2 * * * * *".parse().expect("Invalid cron expression");
    let mut scheduler = CronScheduler::new(cron);

    // The trigger closure must be set up to accept an optional context
    scheduler.start(|_: Option<&()>| {
        println!("Task 1 triggered at {:?}", Local::now());
    });

    // The tasks can be paused, resumed, or stopped as needed
    // scheduler.pause();
    // scheduler.resume();
    // scheduler.stop();

    // Loop to keep the main process alive
    // - You need to supply a time-zoned "now" to tick, so that
    //   croner knows which timezone to match the pattern against.
    //   Using Local in this example.
    while scheduler.tick(Local::now()) != SchedulerResult::Dead {
        // Sleep for a short duration to prevent busy waiting
        thread::sleep(std::time::Duration::from_millis(300));
    }
}

有关详细文档和示例,请访问 Croner Scheduler on docs.rs

贡献

我们欢迎贡献!请随时提交拉取请求或打开一个问题。

许可证

本项目采用 MIT 许可证 - 有关详细信息,请参阅 LICENSE.md 文件。

免责声明

请注意,Croner Scheduler 目前处于早期开发阶段。因此,API 可能会在未来的版本中更改,遵循语义版本控制原则。我们建议在将 Croner Scheduler 集成到您的项目中时考虑到这一点。

联系方式

如果您有任何问题或反馈,请在存储库中打开一个问题,我们将尽快回复您。

依赖项

~1.5MB
~20K SLoC