#cron #schedule #periodic #time

cron_rs

用Rust编写的Cron解析器和作业调度器

7个版本

使用旧Rust 2015

0.1.6 2017年9月13日
0.1.5 2017年9月12日
0.1.2 2017年3月7日

#1991解析器实现

每月30次下载

MIT 许可证

22KB
495

cron_rs

Rust Crates.io Docs.rs

用Rust编写的Cron解析器和周期性作业调度器。

用法

Cron时间格式

MINUTE HOUR DAY MONTH WEEKDAY

  • MINUTE(必需):分钟,0-59。
  • HOUR(必需):小时,0-23。
  • DAY(必需):月份中的天数,1-31。
  • MONTH(必需):年份中的月份,1-12。
  • WEEKDAY(必需):星期中的天数,0-6。

安装

在Cargo.toml中

    [dependencies]  
    cron_rs = "*"  

好例子:Cron时间格式(间隔)

*/2 1-8,11 * * *  

完整示例

调度器是一个cron时间调度器。
以下示例将向您展示

  • 解析CronEntry。
  • 创建一个输出保持器来捕获cron输出。
  • 创建一个调度器。
  • 创建一个任务,然后启动它,它将周期性地启动和执行新的作业。
extern crate time;
extern crate cron_rs;

use std::thread;
use std::time as stdtime;
use std::process::Command;

use cron_rs::Scheduler;
use cron_rs::Job;
use cron_rs::Server;
use cron_rs::OutputKeeper;
use cron_rs::CronEntry;
use cron_rs::Task;

fn main() {
    // Make a time scheduler
    let tm = time::now();
    let sch = Scheduler::new("*/2 1-4,16,11,17 * * *").unwrap();
    println!("{:?}", sch);
    println!("{:?} {}", &tm, sch.isTimeUp(&tm));

    // Parse cron string to CronEntry
    let cronEntry = r#"{"intervals":"* * * * *","command":"date +%F_%T","description":"print time every minute","daemon":false,"testRun":true,"timeoutSeconds":5,"autokill":true,"alarmEmail":false,"alarmSms":true,"alarmUsers":"gaobushuang","id":1,"cronId":1,"treeId":261,"treePath":"b2c.b2cop.build-ci.build-ci.cn-test","active":false,"updateTime":"2017-02-07T13:22:52+08:00","lastCode":0,"lastJob":0,"watch":true,"host":""}"#
        .parse::<CronEntry>().unwrap();

    // Make time scheduler
    let intervals = &*cronEntry.intervals.to_owned();
    let sch = Scheduler::new(intervals).unwrap();

    // Make a new server and a output keeper,
    // then waiting for incoming message.
    let srv = Server {
        output_keeper: "foo".to_string(),
    };
    let mut keeper = OutputKeeper::new(&srv);

    // Make a new task
    let mut mytask = Task::new(sch, cronEntry, &keeper);

    // mytask spawn a new job and execute it every minute.
    mytask.start();
}  

依赖关系

  • time
  • regex

常见问题解答

依赖关系

~11MB
~263K SLoC