sche - 一种人类能够看懂的 cron 语法(下)

简介: sche - 一种人类能够看懂的 cron 语法

安装之后,就会得到一个 sche 命令,帮助文件如下:

-> % sche -h
usage: sche [-h] [-f FILE] [-t]
A simple command like `cron`, but more human friendly.
The default configuration file is /etc/schetab, syntax goes like:
    # (optional) set time zone first
    timezone = +0800
    # line starts with # is a comment
    every 60 minutes, echo "wubba lubba dub dub"
    # backup database every day at midnight
    every day at 00:00, mysqldump -u backup
    # redirect logs so you can see them
    every minute, do_some_magic >> /some/output/file 2>&1
optional arguments:
  -h, --help            show this help message and exit
  -f FILE, --file FILE  configuration file to use
  -t, --test            test configuration and exit

我们只需要把需要执行的命令放到 /etc/schetab 文件下就好了,这里显然是在致敬 /etc/crontab。比如说:

-> % cat /etc/schetab
timzone = +0800
every 5 seconds, echo "wubba lubba dub dub"
every 10 seconds, date
-> % sche
wubba lubba dub dub
Tue Sep  1 22:15:01 CST 2020
wubba lubba dub dub
wubba lubba dub dub
Tue Sep  1 22:15:11 CST 2020
wubba lubba dub dub
wubba lubba dub dub
Tue Sep  1 22:15:21 CST 2020
wubba lubba dub dub

如何让 sche 像 cron 一样作为一个守护进程呢?秉承 Unix 一个命令只做一件事的哲学,sche 本身显然是不提供这个功能的,可以使用 systemd 实现,几行配置写个 unit 文件就搞定了。

sche 的来源

sche 是 schedule -- 另一个 Python 库的一个 fork, schedule 支持这样的 Python 语句:

schedule.every(10).minutes.do(job)
schedule.every().hour.do(job)
schedule.every().day.at("10:30").do(job)
schedule.every().monday.do(job)
schedule.every().wednesday.at("13:15").do(job)
schedule.every().minute.at(":17").do(job)

然而我的需求是把时间配置独立出来,能够像 cron 一样存到一个文本文件里,而不是写成 Python 代码,于是提了一个 PR,增加了 when 这个方法来解析表达式。同时我还强烈需求时区支持,然而原版的 schedule 也不支持。所以就创建了一个 fork.

sche.when("every wednesday at 13:15").do(job)
sche.timezone("+0800").every().day.at("00:00").do(job)

最后,原生的 cron 命令实际上(至少我)已经极少用了,然而 crontab 的语法流传还是非常广的,在所有需要定时任务的地方,几乎都能看到 cron 的身影,比如说 Kubernetes job 等等,如果能够使用一种让正常人能随时看懂的语法,感觉还是很有意义的。

目录
相关文章
|
Linux 调度 Python
sche - 一种人类能够看懂的 cron 语法(上)
sche - 一种人类能够看懂的 cron 语法
107 0
|
运维 调度 开发者
深入解析 Cron 表达式:定时任务的时间艺术
大家好,今天我们将一起来深入了解 Cron 表达式,这是计划任务中不可或缺的时间表达式。无论你是一名开发者、运维工程师还是对定时任务感兴趣的读者,本文都将帮助你理解 Cron 表达式的基本结构、常用格式以及如何编写自定义的定时任务。也为大家提供了一个在线cron表达式生成的工具,让我们开始探索这项定时任务的时间艺术吧!
1194 0
深入解析 Cron 表达式:定时任务的时间艺术
关于Cron 表达式的解惑
关于Cron 表达式的解惑
304 0
|
Java Unix 调度
cron 表达式解读
cron 表达式解读
|
Unix Java Ruby
cron表达式语法规则及常见示例
cron表达式语法规则及常见示例
307 0
|
Windows
简单理解crontab表达式
简单理解crontab表达式
306 0
|
开发工具
crontab 基础用法
crontab 基础用法
Crontab 表达式详解
一个cron表达式有至少6个(也可能7个,6个比7个少元素秒)由空格分隔的时间元素。
145 0
Cron 表达式的一个误区
Cron 表达式的一个误区
135 0
Cron 表达式的一个误区
|
Java 算法 数据可视化
Antlr4: 修改语法规则更接近普通BNF格式
为"圈2"语言, 修改语法定义规则接近BNF格式. Modify grammar definition of pretotype programming language quan2 to make it closer to BNF format.
1120 0