ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

定时任务选型,你也许有更好的选择?-linux定时任务crontab

2020-11-28 23:50:32  阅读:168  来源: 互联网

标签:java String long jobName crontab linux 定时 public


定时任务选型,你也许有更好的选择?-linux定时任务crontab
一个系统刚刚构建的时候,往往需要定时执行的任务,但没有,有人就推荐java的timer

import java.util.Timer;
import java.util.TimerTask;

public class TimerTest extends TimerTask {

private String jobName = "";

public TimerTest(String jobName) {
super();
this.jobName = jobName;
}

@Override
public void run() {
System.out.println("execute " + jobName);
}

public static void main(String[] args) {
Timer timer = new Timer();
long delay1 = 1 * 1000;
long period1 = 1000;
// 从现在开始 1 秒钟之后,每隔 1 秒钟执行一次 job1
timer.schedule(new TimerTest("job1"), delay1, period1);
long delay2 = 2 * 1000;
long period2 = 2000;
// 从现在开始 2 秒钟之后,每隔 2 秒钟执行一次 job2
timer.schedule(new TimerTest("job2"), delay2, period2);
}
}

或者sheduler,

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class ScheduledExecutorTest implements Runnable {
 private String jobName = "";

 public ScheduledExecutorTest(String jobName) {
 super();
 this.jobName = jobName;
 }

 @Override
 public void run() {
 System.out.println("execute " + jobName);
 }

 public static void main(String[] args) {
 ScheduledExecutorService service = Executors.newScheduledThreadPool(10);

 long initialDelay1 = 1;
 long period1 = 1;
 // 从现在开始1秒钟之后,每隔1秒钟执行一次job1
 service.scheduleAtFixedRate(
 new ScheduledExecutorTest("job1"), initialDelay1,
 period1, TimeUnit.SECONDS);

 long initialDelay2 = 1;
 long delay2 = 1;
 // 从现在开始2秒钟之后,每隔2秒钟执行一次job2
 service.scheduleWithFixedDelay(
 new ScheduledExecutorTest("job2"), initialDelay2,
 delay2, TimeUnit.SECONDS);

这两样在单机上运行都没有问题,但如果有多台机器就无法使用了,原因是重复执行。

解决的方便可以使用锁(数据库或者redis等其他的),这样会增加程序的复杂度,这里有一个更好的解决方式:使用linux自带的crontab

1.使用crontab

crontab -u //设定某个用户的cron服务
crontab -l //列出某个用户cron服务的详细内容
crontab -r //删除某个用户的cron服务
crontab -e //编辑某个用户的cron服务

2. cron表达式

基本格式 :

          • command 分 时 日 月 周 命令
            第1列表示分钟1~59 每分钟用或者 /1表示频率

第2列表示小时1~23(0表示0点)

第3列表示日期1~31

第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)

第6列要运行的命令

3.保存

标签:java,String,long,jobName,crontab,linux,定时,public
来源: https://blog.51cto.com/15015181/2556412

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有