たぶんあなたはタイミングタスクのためのより良い選択がありますか?-linuxタイミングタスクcrontab

たぶんあなたはタイミングタスクのためのより良い選択がありますか? -linuxタイミングタスクcrontab
システムが構築されたばかりの場合、定期的に実行する必要があるタスクであることがよくありますが、そうでない場合は、誰かがjavaタイマーを推奨します

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);
}
}

またはシェデュラー、

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);

どちらも1台のマシンで問題なく実行できますが、複数のマシンがあると繰り返し実行されるため使用できません。

このソリューションの便利な点は、ロック(データベースやredisなど)を使用することです。これにより、プログラムが複雑になります。より良いソリューションは次のとおりです。linuxに付属のcrontabを使用します。

1.crontabを使用します

crontab -u //ユーザーのcronサービスを設定します
crontab-l //ユーザーのcronサービスの詳細を一覧
表示します
crontab- r //ユーザーのcronサービスを削除しますcrontab- e //ユーザーのcronサービスを編集しますcronサービス

2.cron式

基本フォーマット:

          • コマンド時分割日、月、週
            コマンドの最初の列は、1から59までの分を示します。頻度には各分または/ 1を使用します。

2番目の列は1〜23時間を示します(0は0時を意味します)

3列目は日付1〜31を示します

4番目の列は1〜12か月
、5番目の列の識別番号は0〜6週を示します(0は日曜日を意味します)

列6で実行するコマンド

3.保存

おすすめ

転載: blog.51cto.com/15015181/2556412