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 等等,如果能够使用一种让正常人能随时看懂的语法,感觉还是很有意义的。

目录
相关文章
|
7月前
|
人工智能 Shell Linux
shell基础语法
shell基础语法
48 1
|
6天前
|
监控 调度
cron 表达式有哪些常见的用途?
cron 表达式有哪些常见的用途?
46 0
|
8月前
|
Linux 调度 Python
sche - 一种人类能够看懂的 cron 语法(上)
sche - 一种人类能够看懂的 cron 语法
42 0
|
9月前
|
运维 调度 开发者
深入解析 Cron 表达式:定时任务的时间艺术
大家好,今天我们将一起来深入了解 Cron 表达式,这是计划任务中不可或缺的时间表达式。无论你是一名开发者、运维工程师还是对定时任务感兴趣的读者,本文都将帮助你理解 Cron 表达式的基本结构、常用格式以及如何编写自定义的定时任务。也为大家提供了一个在线cron表达式生成的工具,让我们开始探索这项定时任务的时间艺术吧!
565 0
深入解析 Cron 表达式:定时任务的时间艺术
|
开发工具
crontab 基础用法
crontab 基础用法
|
存储 自然语言处理 算法
语法设计——基于LL(1)文法的预测分析表法
语法设计——基于LL(1)文法的预测分析表法
208 0
语法设计——基于LL(1)文法的预测分析表法
Cron 表达式的一个误区
Cron 表达式的一个误区
106 0
Cron 表达式的一个误区
推荐一个比crontab更好用的东西:crongo
This is a crontab service that supports hot plug and high performance. In addition, it supports second level (first parameters), multi time point and time section function. 这是一个支持热插拨、高性能的crontab服务,另外,它还支持秒级别(第1个参数)、多时间点、时间段功能。
970 0