最近正在做一款测试平台,然后涉及到了定时任务,虽然我做了很多定时设计,比如间隔几分钟运行,每天的几点几分运行等等。
但是还是有不少小伙伴希望可以直接套用jenkins的时间定时设计,那个设计特别直观,也特别灵活。
甚至可以设置到 :工作日的每天下午3-6点的每小时的第5分钟执行这种...
不得不说,你们的需求是真变态啊。
jenkins的时间设置其实很通俗易懂,这里如果小伙伴不能记住的话,恐怕要被人笑的:
总结来说,简单的用法就是 五个字符串 (用空格隔开)。
minute:表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
上述的每个字符串都可以直接使用下列的具体表达式:
星号(*):代表所有可能的值
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
这样看来,文章开头的那个需求(工作日的每天下午3-6点的每小时的第5分钟执行)就可以写成:
5 15-18 * * 1-5
这样我觉得都会写,但是如果我们要用python实现,解析出来,这个设置的下一次执行的具体时间,恐怕就很难办到了。
于是乎,给大家推荐一个第三方库:
python_jenkins_monitor
下载方式:pip install python_jenkins_monitor
导入方法:
from python_jenkins_monitor.python_jenkins_monitor import get_next_time
调用时需要传入设置字符串:
print(get_next_time('5 15-18 * * 1-5'))
结果展示:(注意,回来的是一个时间戳)
这个时间戳也就是下一次要执行的具体时间了,小伙伴可以手动给这个时间戳还原成可查看的格式:time.strftime('格式',time.localtime(时间戳))
结果如下:当前时间 8-24 22:21 所以下一次满足的最早时间是25号的15:05
怎么样,是不是非常简单呢?
欢迎关注:测试开发干货
进群加v: qingwanjianhua