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

目录
相关文章
|
6月前
|
Shell 开发者
Shell 判断语句:决策的艺术
了解Shell脚本的选择结构,包括if和case语句,对于编写条件执行的脚本至关重要。if语句基于条件执行命令,基本格式为`if condition; then statements; fi`,可扩展为if-else或多if-elif-else结构。例如,根据输入的整数输出对应的星期。case语句更灵活,匹配特定值或模式,如`case $var in pattern) commands;; esac`,支持正则表达式。两者都用于条件分支,适用于不同场景。
30 1
|
Linux 调度 Python
sche - 一种人类能够看懂的 cron 语法(上)
sche - 一种人类能够看懂的 cron 语法
95 0
|
运维 调度 开发者
深入解析 Cron 表达式:定时任务的时间艺术
大家好,今天我们将一起来深入了解 Cron 表达式,这是计划任务中不可或缺的时间表达式。无论你是一名开发者、运维工程师还是对定时任务感兴趣的读者,本文都将帮助你理解 Cron 表达式的基本结构、常用格式以及如何编写自定义的定时任务。也为大家提供了一个在线cron表达式生成的工具,让我们开始探索这项定时任务的时间艺术吧!
1163 0
深入解析 Cron 表达式:定时任务的时间艺术
关于Cron 表达式的解惑
关于Cron 表达式的解惑
284 0
|
Java Unix 调度
cron 表达式解读
cron 表达式解读
|
Unix Java Ruby
cron表达式语法规则及常见示例
cron表达式语法规则及常见示例
295 0
|
Windows
简单理解crontab表达式
简单理解crontab表达式
296 0
|
存储 自然语言处理 算法
语法设计——基于LL(1)文法的预测分析表法
语法设计——基于LL(1)文法的预测分析表法
302 0
语法设计——基于LL(1)文法的预测分析表法
|
开发工具
crontab 基础用法
crontab 基础用法
Crontab 表达式详解
一个cron表达式有至少6个(也可能7个,6个比7个少元素秒)由空格分隔的时间元素。
142 0