cron计划任务以及Quartz的使用

cron工具的使用


cron是什么?

  • cron是Linux下的定时执行工具,可以根据设置的时间自动执行某项任务,例如可以完成日志的分析、jar包定时执行等等一些需要定时执行的任务。
  • cron需要启动服务来进行任务的定时执行。具体代码如下
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
  • CronTab所代表的含义
    m:代表分钟,取值范围(0-59)
    h:代表小时,取值范围(0-23)
    dom:代表日期,取值范围(1-31)
    mon:代表月份,取值范围(1-12)
    dow:代表星期几,取值范围(0-7),其中0和7都代表星期天

  • CronTab格式说明图
    CronTab格式说明图

  • 一般来讲,可以通过两种方式来进行使用
    1. 修改配置文件
    2. 直接使用命令执行
      下面分别简单介绍一下两者的用法

修改配置文件来执行计划任务

sudo vim /etc/crontab

crontab文件
可以看到类似一张表,表头注释写着m h dom mon dow user command的字段,分别代表的意思是
分钟、小时、 日期、月份和星期以及后面所需要执行的命令。
在文件中已经存在这么几条命令,从上到下分别代表的意思是:
1.17 * * * * root cd / && run-parts --report /etc/cron.hourly
每天每个小时的17分执行一次/ect/cron.hourly任务
2.25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
每天的6:25执行cron.daily文件的内容
3.47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
每个星期天6:47执行cron.weekly文件的内容
4.52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
每个月的每月1号6:52执行cron.monthly的内容


直接在命令行内操作

cron服务提供crontab来设定cron服务,以下是这个命令的一些参数与说明:
crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
crontab -l //列出某个用户cron服务的详细内容
crontab -r //删除某个用户的cron服务
crontab -e //编辑某个用户的cron服务
比如说root查看自己的cron设置:crontab -u root -l

下面举例说明具体应该怎么使用

vim cron_test.txt


0 6 * * * echo "Good morning." >> /tmp/test.txt         //每天早上6点打印Good moring
0 */2 * * * echo "Have a break now." >> /tmp/test.txt   //每两个小时
0 4 1 1 * command line                                  //1月1日早上4点

Quartz的用法

掌握了CronTab的基本用法后,很容易使用Quartz这个Java定时任务工具包。
用法:比CronTab多了一位,秒
例如:

"30 * * * * ?" 每半分钟触发任务
"30 10 * * * ?" 每小时的1030秒触发任务
"30 10 1 * * ?" 每天11030秒触发任务
"30 10 1 20 * ?" 每月2011030秒触发任务
"30 10 1 20 10 ? *" 每年102011030秒触发任务
"30 10 1 20 10 ? 2011" 2011102011030秒触发任务
"30 10 1 ? 10 * 2011" 201110月每天11030秒触发任务
"30 10 1 ? 10 SUN 2011" 201110月每周日11030秒触发任务
"15,30,45 * * * * ?"15秒,30秒,45秒时触发任务
"15-45 * * * * ?" 1545秒内,每秒都触发任务
"15/5 * * * * ?" 每分钟的每15秒开始触发,每隔5秒触发一次
"15-30/5 * * * * ?" 每分钟的15秒到30秒之间开始触发,每隔5秒触发一次
"0 0/3 * * * ?" 每小时的第00秒开始,每三分钟触发一次
"0 15 10 ? * MON-FRI" 星期一到星期五的10150秒触发任务
"0 15 10 L * ?" 每个月最后一天的10150秒触发任务
"0 15 10 LW * ?" 每个月最后一个工作日的10150秒触发任务
"0 15 10 ? * 5L" 每个月最后一个星期四的10150秒触发任务
"0 15 10 ? * 5#3" 每个月第三周的星期四的10150秒触发任务

下面使用注解方式进行执行(针对web项目的定时任务):

    @Scheduled(cron = "0/1 * * * * ? ")//每隔1秒执行一次
    public void run(){
        System.out.println("Hello MyJob"+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()));
    }

    @Scheduled(cron = "0/60 * * * * ? ")  //每分钟执行一次
    public void testPython(){
        System.out.println("Hello a minutes");
    }

如果遇到较为复杂的表达式,还可以去网上在线生成CronTab表达式的网站进行编辑
在线Cron表达式生成器

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值