Cron Expression - 在开始时间后每小时运行一次

时间:2013-05-21 23:25:41

标签: quartz-scheduler cronexpression

我希望在一定的开始时间后每小时运行一次cron作业。目前我的cron作业表达是

cronExpression = seconds + " " + minutes +  " " +   hours +"/1" + " " + " * * ? *" ;

(用户选择传入秒,分钟,小时)

工作在合适的时间开始,每小时一直运行到午夜,然后停止到第二天的小时,然后重新开始。如何让工作连续运行而不是在午夜停止?

我知道我可以将表达式更改为

cronExpression = seconds + " " + minutes +  " " * * * ? *" ;

但是它不会考虑开始时间。它会在每小时运行。

提前致谢, 富

3 个答案:

答案 0 :(得分:3)

你的意思是你想让这份工作在给定时间开始,然后每小时运行一次吗?如果是这样,我认为cron表达式不是正确的方法。

如果您正在使用调度程序,则应该可以直接启动作业并以给定间隔永久运行。例如,这是来自JobBuilder的Quartz调度程序文档的片段:

     JobDetail job = newJob(MyJob.class)
         .withIdentity("myJob")
         .build();

     Trigger trigger = newTrigger() 
         .withIdentity(triggerKey("myTrigger", "myTriggerGroup"))
         .withSchedule(simpleSchedule()
             .withIntervalInHours(1)
             .repeatForever())
         .startAt(futureDate(10, MINUTES))
         .build();

     scheduler.scheduleJob(job, trigger);

答案 1 :(得分:0)

如果当前时间在您的开始时间之后,每小时运行一个包装器来运行您的工作。

例如,

case $(date +%H) in 
    09 |1[0-6] ) pingcheck ;;
esac

将在09:00和16:59之间运行pingcheck(无论是什么:-)。

答案 2 :(得分:0)

使用您自己的表达

  

cronExpression =秒+“”+分钟+“”* * *? *“;

使用startAt(您的开始时间)方法()提及触发器的开始时间。当触发器开始生效时,这个开始时间将隐含地告诉石英。