定时任务之cron表达式

一  cron表达式定义

Cron表达式是一个具有时间含义的字符串,字符串以5个空格隔开,分为6个域,格式为X X X X X X。其中X是一个域的占位符。单个域有多个取值时,使用半角逗号,隔开取值。每个域可以是确定的取值,也可以是具有逻辑意义的特殊字符。

域取值

下表为Cron表达式中六个域能够取的值以及支持的特殊字符。

是否必需取值范围特殊字符
[0, 59]* , - /
分钟[0, 59]* , - /
小时[0, 23]* , - /
日期[1, 31]* , - / ? L W
月份[1, 12]或[JAN, DEC]* , - /
星期[1, 7]或[MON, SUN]。若您使用[1, 7]表达方式,1代表星期一,7代表星期日。* , - / ? L #

特殊字符

Cron表达式中的每个域都支持一定数量的特殊字符,每个特殊字符有其特殊含义。

特殊字符含义示例
*所有可能的值。在月域中,*表示每个月;在星期域中,*表示星期的每一天。
,列出枚举值。在分钟域中,5,20表示分别在5分钟和20分钟触发一次。
-范围。在分钟域中,5-20表示从5分钟到20分钟之间每隔一分钟触发一次。
/指定数值的增量。在分钟域中,0/15表示从第0分钟开始,每15分钟。在分钟域中3/20表示从第3分钟开始,每20分钟。
?不指定值,仅日期和星期域支持该字符。当日期或星期域其中之一被指定了值以后,为了避免冲突,需要将另一个域的值设为?
L单词Last的首字母,表示最后一天,仅日期和星期域支持该字符。

说明 指定L字符时,避免指定列表或者范围,否则,会导致逻辑问题。

  • 在日期域中,L表示某个月的最后一天。在星期域中,L表示一个星期的最后一天,也就是星期日(SUN)。
  • 如果在L前有具体的内容,例如,在星期域中的6L表示这个月的最后一个星期六。
W除周末以外的有效工作日,在离指定日期的最近的有效工作日触发事件。W字符寻找最近有效工作日时不会跨过当前月份,连用字符LW时表示为指定月份的最后一个工作日。在日期域中5W,如果5日是星期六,则将在最近的工作日星期五,即4日触发。如果5日是星期天,则将在最近的工作日星期一,即6日触发;如果5日在星期一到星期五中的一天,则就在5日触发。
#确定每个月第几个星期几,仅星期域支持该字符。在星期域中,4#2表示某月的第二个星期四。

取值示例

以下为Cron表达式的取值示例。

示例说明
0 15 10 ? * *每天上午10:15执行任务
0 15 10 * * ?每天上午10:15执行任务
0 0 12 * * ?每天中午12:00执行任务
0 0 10,14,16 * * ?每天上午10:00点、下午14:00以及下午16:00执行任务
0 0/30 9-17 * * ?每天上午09:00到下午17:00时间段内每隔半小时执行任务
0 * 14 * * ?每天下午14:00到下午14:59时间段内每隔1分钟执行任务
0 0-5 14 * * ?每天下午14:00到下午14:05时间段内每隔1分钟执行任务
0 0/5 14 * * ?每天下午14:00到下午14:55时间段内每隔5分钟执行任务
0 0/5 14,18 * * ?每天下午14:00到下午14:55、下午18:00到下午18:55时间段内每隔5分钟执行任务
0 0 12 ? * WED每个星期三中午12:00执行任务
0 15 10 15 * ?每月15日上午10:15执行任务
0 15 10 L * ?每月最后一日上午10:15执行任务
0 15 10 ? * 6L每月最后一个星期六上午10:15执行任务
0 15 10 ? * 6#3每月第三个星期六上午10:15执行任务
0 10,44 14 ? 3 WED每年3月的每个星期三下午14:10和14:44执行任务

二  应用场景

1 Java项目中所有的定时任务,规定定时的时候用到都是cron表达式,这个表达式的配置一般有两种方式

    1 配置在数据库中,此时需要修改这个任务的时候,找到对应的数据库记录,直接修改为想定时的cron表达式即可,这种应该是很少很少,

    2 在java项目的配置文件中,配置文件一般在服务器或者对应的部署软件上,此时需要找到对应位置,修改为想定时的cron表达式,修改完配置需要登录服务器重启项目,或者部署服务器重新部署项目。

2 linux定时执行脚本

Linux crontab是用来定期执行程序的命令。

当安装完成操作系统之后,默认便会启动此任务调度命令。

crond 命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

   语法:

    

crontab [ -u user ] { -l | -r | -e }

说明:

crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。

-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。

参数说明

  • -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
  • -r : 删除目前的时程表
  • -l : 列出目前的时程表

例:

修改定时任务的时间为:

1 crontab -e

2 键入i 进去编辑状态

3 修改cron表达式

4 按esc结束标记状态

5 键入:wq!  回车进行保存

6 crontab -l 查看一下定时任务时间是否正确修改即可。

 

 

  • 2
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值