定時任務選型,你也許有更好的選擇?-linux定時任務crontab

定時任務選型,你也許有更好的選擇?-linux定時任務crontab
一個系統剛剛構建的時候,每每須要定時執行的任務,但沒有,有人就推薦java的timerjava

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,linux

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

解決的方即可以使用鎖(數據庫或者redis等其餘的),這樣會增長程序的複雜度,這裏有一個更好的解決方式:使用linux自帶的crontab數據庫

1.使用crontab

crontab -u //設定某個用戶的cron服務
crontab -l //列出某個用戶cron服務的詳細內容
crontab -r //刪除某個用戶的cron服務
crontab -e //編輯某個用戶的cron服務ide

2. cron表達式

基本格式 :this

          • command 分 時 日 月 周 命令
            第1列表示分鐘1~59 每分鐘用或者 /1表示頻率

第2列表示小時1~23(0表示0點)code

第3列表示日期1~31blog

第4列表示月份1~12
第5列標識號星期0~6(0表示星期天)crontab

第6列要運行的命令it

3.保存

相關文章
相關標籤/搜索